#ifndef KVM__IOPORT_H
#define KVM__IOPORT_H

#include "kvm/devices.h"
#include "kvm/kvm-cpu.h"
#include "kvm/rbtree-interval.h"
#include "kvm/fdt.h"

#include <stdbool.h>
#include <limits.h>
#include <asm/types.h>
#include <linux/types.h>
#include <linux/byteorder.h>

/* some ports we reserve for own use */
#define IOPORT_DBG			0xe0

struct kvm;

struct ioport {
	struct rb_int_node		node;
	struct ioport_operations	*ops;
	void				*priv;
	struct device_header		dev_hdr;
	u32				refcount;
	bool				remove;
};

struct ioport_operations {
	bool (*io_in)(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size);
	bool (*io_out)(struct ioport *ioport, struct kvm_cpu *vcpu, u16 port, void *data, int size);
	void (*generate_fdt_node)(struct ioport *ioport, void *fdt,
				  void (*generate_irq_prop)(void *fdt,
							    u8 irq,
							    enum irq_type));
};

int ioport__setup_arch(struct kvm *kvm);
void ioport__map_irq(u8 *irq);

int __must_check ioport__register(struct kvm *kvm, u16 port, struct ioport_operations *ops,
				  int count, void *param);
int ioport__unregister(struct kvm *kvm, u16 port);
int ioport__init(struct kvm *kvm);
int ioport__exit(struct kvm *kvm);

static inline u8 ioport__read8(u8 *data)
{
	return *data;
}
/* On BE platforms, PCI I/O is byteswapped, i.e. LE, so swap back. */
static inline u16 ioport__read16(u16 *data)
{
	return le16_to_cpu(*data);
}

static inline u32 ioport__read32(u32 *data)
{
	return le32_to_cpu(*data);
}

static inline void ioport__write8(u8 *data, u8 value)
{
	*data		 = value;
}

static inline void ioport__write16(u16 *data, u16 value)
{
	*data		 = cpu_to_le16(value);
}

static inline void ioport__write32(u32 *data, u32 value)
{
	*data		 = cpu_to_le32(value);
}

#endif /* KVM__IOPORT_H */
