xref: /kvmtool/include/kvm/ioport.h (revision f05bbe8ddf17b96b4f0a4a7a9432b05804577582)
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
9d1888318SCyrill Gorcunov #define IOPORT_VIRTIO_BLK		0xc200	/* Virtio block device */
10*f05bbe8dSAsias He #define IOPORT_VIRTIO_BLK_SIZE		256
11*f05bbe8dSAsias He #define IOPORT_VIRTIO_CONSOLE		0xd200	/* Virtio console device */
12*f05bbe8dSAsias He #define IOPORT_VIRTIO_CONSOLE_SIZE	256
13beb095ebSCyrill Gorcunov 
1413a7760fSPekka Enberg struct kvm;
1513a7760fSPekka Enberg 
1613a7760fSPekka Enberg struct ioport_operations {
1713a7760fSPekka Enberg 	bool (*io_in)(struct kvm *self, uint16_t port, void *data, int size, uint32_t count);
1813a7760fSPekka Enberg 	bool (*io_out)(struct kvm *self, uint16_t port, void *data, int size, uint32_t count);
1913a7760fSPekka Enberg };
2013a7760fSPekka Enberg 
213e553514SPekka Enberg void ioport__register(uint16_t port, struct ioport_operations *ops, int count);
2213a7760fSPekka Enberg 
23fbc2fbf9SPekka Enberg static inline uint8_t ioport__read8(uint8_t *data)
24fbc2fbf9SPekka Enberg {
25fbc2fbf9SPekka Enberg 	return *data;
26fbc2fbf9SPekka Enberg }
27fbc2fbf9SPekka Enberg 
288b1ff07eSPekka Enberg static inline uint16_t ioport__read16(uint16_t *data)
298b1ff07eSPekka Enberg {
308b1ff07eSPekka Enberg 	return *data;
318b1ff07eSPekka Enberg }
328b1ff07eSPekka Enberg 
33fbc2fbf9SPekka Enberg static inline uint32_t ioport__read32(uint32_t *data)
34fbc2fbf9SPekka Enberg {
35fbc2fbf9SPekka Enberg 	return *data;
36fbc2fbf9SPekka Enberg }
37fbc2fbf9SPekka Enberg 
38fbc2fbf9SPekka Enberg static inline void ioport__write8(uint8_t *data, uint8_t value)
39fbc2fbf9SPekka Enberg {
40fbc2fbf9SPekka Enberg 	*data		 = value;
41fbc2fbf9SPekka Enberg }
42fbc2fbf9SPekka Enberg 
438b1ff07eSPekka Enberg static inline void ioport__write16(uint16_t *data, uint16_t value)
448b1ff07eSPekka Enberg {
458b1ff07eSPekka Enberg 	*data		 = value;
468b1ff07eSPekka Enberg }
478b1ff07eSPekka Enberg 
48fbc2fbf9SPekka Enberg static inline void ioport__write32(uint32_t *data, uint32_t value)
49fbc2fbf9SPekka Enberg {
50fbc2fbf9SPekka Enberg 	*data		 = value;
51fbc2fbf9SPekka Enberg }
52fbc2fbf9SPekka Enberg 
5313a7760fSPekka Enberg #endif /* KVM__IOPORT_H */
54