cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

iodev.h (1515B)


      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
     58static inline void kvm_iodevice_destructor(struct kvm_io_device *dev)
     59{
     60	if (dev->ops->destructor)
     61		dev->ops->destructor(dev);
     62}
     63
     64#endif /* __KVM_IODEV_H__ */