mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
![Thomas Gleixner](/assets/img/avatar_default.png)
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license this program is distributed in the hope that it will be useful but without any warranty without even the implied warranty of merchantability or fitness for a particular purpose see the gnu general public license for more details you should have received a copy of the gnu general public license along with this program if not see http www gnu org licenses extracted by the scancode license scanner the SPDX license identifier GPL-2.0-only has been chosen to replace the boilerplate/reference in 15 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Reviewed-by: Alexios Zavras <alexios.zavras@intel.com> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190530000437.237481593@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#ifndef __KVM_IODEV_H__
|
|
#define __KVM_IODEV_H__
|
|
|
|
#include <linux/kvm_types.h>
|
|
#include <linux/errno.h>
|
|
|
|
struct kvm_io_device;
|
|
struct kvm_vcpu;
|
|
|
|
/**
|
|
* kvm_io_device_ops are called under kvm slots_lock.
|
|
* read and write handlers return 0 if the transaction has been handled,
|
|
* or non-zero to have it passed to the next device.
|
|
**/
|
|
struct kvm_io_device_ops {
|
|
int (*read)(struct kvm_vcpu *vcpu,
|
|
struct kvm_io_device *this,
|
|
gpa_t addr,
|
|
int len,
|
|
void *val);
|
|
int (*write)(struct kvm_vcpu *vcpu,
|
|
struct kvm_io_device *this,
|
|
gpa_t addr,
|
|
int len,
|
|
const void *val);
|
|
void (*destructor)(struct kvm_io_device *this);
|
|
};
|
|
|
|
|
|
struct kvm_io_device {
|
|
const struct kvm_io_device_ops *ops;
|
|
};
|
|
|
|
static inline void kvm_iodevice_init(struct kvm_io_device *dev,
|
|
const struct kvm_io_device_ops *ops)
|
|
{
|
|
dev->ops = ops;
|
|
}
|
|
|
|
static inline int kvm_iodevice_read(struct kvm_vcpu *vcpu,
|
|
struct kvm_io_device *dev, gpa_t addr,
|
|
int l, void *v)
|
|
{
|
|
return dev->ops->read ? dev->ops->read(vcpu, dev, addr, l, v)
|
|
: -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline int kvm_iodevice_write(struct kvm_vcpu *vcpu,
|
|
struct kvm_io_device *dev, gpa_t addr,
|
|
int l, const void *v)
|
|
{
|
|
return dev->ops->write ? dev->ops->write(vcpu, dev, addr, l, v)
|
|
: -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline void kvm_iodevice_destructor(struct kvm_io_device *dev)
|
|
{
|
|
if (dev->ops->destructor)
|
|
dev->ops->destructor(dev);
|
|
}
|
|
|
|
#endif /* __KVM_IODEV_H__ */
|