xref: /kvmtool/include/kvm/ioport.h (revision 3fdf659d959233a543d1f29a358f8da994cec0fb)
113a7760fSPekka Enberg #ifndef KVM__IOPORT_H
213a7760fSPekka Enberg #define KVM__IOPORT_H
313a7760fSPekka Enberg 
413a7760fSPekka Enberg #include <stdbool.h>
5*3fdf659dSSasha Levin #include <asm/types.h>
6*3fdf659dSSasha Levin #include <linux/types.h>
713a7760fSPekka Enberg 
8beb095ebSCyrill Gorcunov /* some ports we reserve for own use */
9beb095ebSCyrill Gorcunov #define IOPORT_DBG			0xe0
10d1888318SCyrill Gorcunov #define IOPORT_VIRTIO_BLK		0xc200	/* Virtio block device */
114749e795SSasha Levin #define IOPORT_VIRTIO_BLK_SIZE		0x200
12f05bbe8dSAsias He #define IOPORT_VIRTIO_CONSOLE		0xd200	/* Virtio console device */
13f05bbe8dSAsias He #define IOPORT_VIRTIO_CONSOLE_SIZE	256
144f56d42cSAsias He #define IOPORT_VIRTIO_NET		0xe200	/* Virtio network device */
154f56d42cSAsias He #define IOPORT_VIRTIO_NET_SIZE		256
16376ac44cSSasha Levin #define IOPORT_VIRTIO_RNG		0xf200	/* Virtio network device */
17376ac44cSSasha Levin #define IOPORT_VIRTIO_RNG_SIZE		256
18beb095ebSCyrill Gorcunov 
1913a7760fSPekka Enberg struct kvm;
2013a7760fSPekka Enberg 
2113a7760fSPekka Enberg struct ioport_operations {
22*3fdf659dSSasha Levin 	bool (*io_in)(struct kvm *self, u16 port, void *data, int size, u32 count);
23*3fdf659dSSasha Levin 	bool (*io_out)(struct kvm *self, u16 port, void *data, int size, u32 count);
2413a7760fSPekka Enberg };
2513a7760fSPekka Enberg 
26ac38f433SPekka Enberg void ioport__setup_legacy(void);
27ac38f433SPekka Enberg 
28*3fdf659dSSasha Levin void ioport__register(u16 port, struct ioport_operations *ops, int count);
2913a7760fSPekka Enberg 
30*3fdf659dSSasha Levin static inline u8 ioport__read8(u8 *data)
31fbc2fbf9SPekka Enberg {
32fbc2fbf9SPekka Enberg 	return *data;
33fbc2fbf9SPekka Enberg }
34fbc2fbf9SPekka Enberg 
35*3fdf659dSSasha Levin static inline u16 ioport__read16(u16 *data)
368b1ff07eSPekka Enberg {
378b1ff07eSPekka Enberg 	return *data;
388b1ff07eSPekka Enberg }
398b1ff07eSPekka Enberg 
40*3fdf659dSSasha Levin static inline u32 ioport__read32(u32 *data)
41fbc2fbf9SPekka Enberg {
42fbc2fbf9SPekka Enberg 	return *data;
43fbc2fbf9SPekka Enberg }
44fbc2fbf9SPekka Enberg 
45*3fdf659dSSasha Levin static inline void ioport__write8(u8 *data, u8 value)
46fbc2fbf9SPekka Enberg {
47fbc2fbf9SPekka Enberg 	*data		 = value;
48fbc2fbf9SPekka Enberg }
49fbc2fbf9SPekka Enberg 
50*3fdf659dSSasha Levin static inline void ioport__write16(u16 *data, u16 value)
518b1ff07eSPekka Enberg {
528b1ff07eSPekka Enberg 	*data		 = value;
538b1ff07eSPekka Enberg }
548b1ff07eSPekka Enberg 
55*3fdf659dSSasha Levin static inline void ioport__write32(u32 *data, u32 value)
56fbc2fbf9SPekka Enberg {
57fbc2fbf9SPekka Enberg 	*data		 = value;
58fbc2fbf9SPekka Enberg }
59fbc2fbf9SPekka Enberg 
6013a7760fSPekka Enberg #endif /* KVM__IOPORT_H */
61