xref: /kvmtool/include/kvm/ioport.h (revision fbc2fbf9b9cdbf265aa13a44cd3cc8a2bfaddfcd)
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
978732ce2SAsias He #define IOPORT_VIRTIO	0xc200
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 
20*fbc2fbf9SPekka Enberg static inline uint8_t ioport__read8(uint8_t *data)
21*fbc2fbf9SPekka Enberg {
22*fbc2fbf9SPekka Enberg 	return *data;
23*fbc2fbf9SPekka Enberg }
24*fbc2fbf9SPekka Enberg 
25*fbc2fbf9SPekka Enberg static inline uint32_t ioport__read32(uint32_t *data)
26*fbc2fbf9SPekka Enberg {
27*fbc2fbf9SPekka Enberg 	return *data;
28*fbc2fbf9SPekka Enberg }
29*fbc2fbf9SPekka Enberg 
30*fbc2fbf9SPekka Enberg static inline void ioport__write8(uint8_t *data, uint8_t value)
31*fbc2fbf9SPekka Enberg {
32*fbc2fbf9SPekka Enberg 	*data		 = value;
33*fbc2fbf9SPekka Enberg }
34*fbc2fbf9SPekka Enberg 
35*fbc2fbf9SPekka Enberg static inline void ioport__write32(uint32_t *data, uint32_t value)
36*fbc2fbf9SPekka Enberg {
37*fbc2fbf9SPekka Enberg 	*data		 = value;
38*fbc2fbf9SPekka Enberg }
39*fbc2fbf9SPekka Enberg 
4013a7760fSPekka Enberg #endif /* KVM__IOPORT_H */
41