4 #include "config.h" // CONFIG_*
5 #include "biosvar.h" // GET_GLOBAL
7 // Types of paravirtualized platforms.
12 typedef struct QemuCfgDmaAccess {
16 } PACKED QemuCfgDmaAccess;
19 extern u64 RamSizeOver4G;
20 extern int PlatformRunningOn;
22 static inline int runningOnQEMU(void) {
23 return CONFIG_QEMU || (
24 CONFIG_QEMU_HARDWARE && GET_GLOBAL(PlatformRunningOn) & PF_QEMU);
26 static inline int runningOnXen(void) {
27 return CONFIG_XEN && GET_GLOBAL(PlatformRunningOn) & PF_XEN;
29 static inline int runningOnKVM(void) {
30 return CONFIG_QEMU && GET_GLOBAL(PlatformRunningOn) & PF_KVM;
33 // Common paravirt ports.
34 #define PORT_SMI_CMD 0x00b2
35 #define PORT_SMI_STATUS 0x00b3
36 #define PORT_QEMU_CFG_CTL 0x0510
37 #define PORT_QEMU_CFG_DATA 0x0511
38 #define PORT_QEMU_CFG_DMA_ADDR_HIGH 0x0514
39 #define PORT_QEMU_CFG_DMA_ADDR_LOW 0x0518
41 // QEMU_CFG_DMA_CONTROL bits
42 #define QEMU_CFG_DMA_CTL_ERROR 0x01
43 #define QEMU_CFG_DMA_CTL_READ 0x02
44 #define QEMU_CFG_DMA_CTL_SKIP 0x04
45 #define QEMU_CFG_DMA_CTL_SELECT 0x08
47 // QEMU_CFG_DMA ID bit
48 #define QEMU_CFG_VERSION_DMA 2
50 int qemu_cfg_dma_enabled(void);
51 void qemu_preinit(void);
52 void qemu_platform_setup(void);
53 void qemu_cfg_init(void);