brintos

brintos / linux-shallow public Read only

0
0
Text · 1.4 KiB · 56619e3 Raw
59 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2 3#ifndef __KVM_IODEV_H__4#define __KVM_IODEV_H__5 6#include <linux/kvm_types.h>7#include <linux/errno.h>8 9struct kvm_io_device;10struct kvm_vcpu;11 12/**13 * kvm_io_device_ops are called under kvm slots_lock.14 * read and write handlers return 0 if the transaction has been handled,15 * or non-zero to have it passed to the next device.16 **/17struct kvm_io_device_ops {18	int (*read)(struct kvm_vcpu *vcpu,19		    struct kvm_io_device *this,20		    gpa_t addr,21		    int len,22		    void *val);23	int (*write)(struct kvm_vcpu *vcpu,24		     struct kvm_io_device *this,25		     gpa_t addr,26		     int len,27		     const void *val);28	void (*destructor)(struct kvm_io_device *this);29};30 31 32struct kvm_io_device {33	const struct kvm_io_device_ops *ops;34};35 36static inline void kvm_iodevice_init(struct kvm_io_device *dev,37				     const struct kvm_io_device_ops *ops)38{39	dev->ops = ops;40}41 42static inline int kvm_iodevice_read(struct kvm_vcpu *vcpu,43				    struct kvm_io_device *dev, gpa_t addr,44				    int l, void *v)45{46	return dev->ops->read ? dev->ops->read(vcpu, dev, addr, l, v)47				: -EOPNOTSUPP;48}49 50static inline int kvm_iodevice_write(struct kvm_vcpu *vcpu,51				     struct kvm_io_device *dev, gpa_t addr,52				     int l, const void *v)53{54	return dev->ops->write ? dev->ops->write(vcpu, dev, addr, l, v)55				 : -EOPNOTSUPP;56}57 58#endif /* __KVM_IODEV_H__ */59