113a7760fSPekka Enberg #ifndef KVM__IOPORT_H 213a7760fSPekka Enberg #define KVM__IOPORT_H 313a7760fSPekka Enberg 413a7760fSPekka Enberg #include <stdbool.h> 513a7760fSPekka Enberg #include <stdint.h> 613a7760fSPekka Enberg 7beb095ebSCyrill Gorcunov /* some ports we reserve for own use */ 8beb095ebSCyrill Gorcunov #define IOPORT_DBG 0xe0 9*d1888318SCyrill Gorcunov #define IOPORT_VIRTIO_BLK 0xc200 /* Virtio block device */ 10beb095ebSCyrill Gorcunov 1113a7760fSPekka Enberg struct kvm; 1213a7760fSPekka Enberg 1313a7760fSPekka Enberg struct ioport_operations { 1413a7760fSPekka Enberg bool (*io_in)(struct kvm *self, uint16_t port, void *data, int size, uint32_t count); 1513a7760fSPekka Enberg bool (*io_out)(struct kvm *self, uint16_t port, void *data, int size, uint32_t count); 1613a7760fSPekka Enberg }; 1713a7760fSPekka Enberg 183e553514SPekka Enberg void ioport__register(uint16_t port, struct ioport_operations *ops, int count); 1913a7760fSPekka Enberg 20fbc2fbf9SPekka Enberg static inline uint8_t ioport__read8(uint8_t *data) 21fbc2fbf9SPekka Enberg { 22fbc2fbf9SPekka Enberg return *data; 23fbc2fbf9SPekka Enberg } 24fbc2fbf9SPekka Enberg 258b1ff07eSPekka Enberg static inline uint16_t ioport__read16(uint16_t *data) 268b1ff07eSPekka Enberg { 278b1ff07eSPekka Enberg return *data; 288b1ff07eSPekka Enberg } 298b1ff07eSPekka Enberg 30fbc2fbf9SPekka Enberg static inline uint32_t ioport__read32(uint32_t *data) 31fbc2fbf9SPekka Enberg { 32fbc2fbf9SPekka Enberg return *data; 33fbc2fbf9SPekka Enberg } 34fbc2fbf9SPekka Enberg 35fbc2fbf9SPekka Enberg static inline void ioport__write8(uint8_t *data, uint8_t value) 36fbc2fbf9SPekka Enberg { 37fbc2fbf9SPekka Enberg *data = value; 38fbc2fbf9SPekka Enberg } 39fbc2fbf9SPekka Enberg 408b1ff07eSPekka Enberg static inline void ioport__write16(uint16_t *data, uint16_t value) 418b1ff07eSPekka Enberg { 428b1ff07eSPekka Enberg *data = value; 438b1ff07eSPekka Enberg } 448b1ff07eSPekka Enberg 45fbc2fbf9SPekka Enberg static inline void ioport__write32(uint32_t *data, uint32_t value) 46fbc2fbf9SPekka Enberg { 47fbc2fbf9SPekka Enberg *data = value; 48fbc2fbf9SPekka Enberg } 49fbc2fbf9SPekka Enberg 5013a7760fSPekka Enberg #endif /* KVM__IOPORT_H */ 51