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