#ifndef __PV_H #define __PV_H #include "config.h" // CONFIG_* #include "biosvar.h" // GET_GLOBAL // Types of paravirtualized platforms. #define PF_QEMU (1<<0) #define PF_XEN (1<<1) #define PF_KVM (1<<2) typedef struct QemuCfgDmaAccess { u32 control; u32 length; u64 address; } PACKED QemuCfgDmaAccess; extern u32 RamSize; extern u64 RamSizeOver4G; extern int PlatformRunningOn; static inline int runningOnQEMU(void) { return CONFIG_QEMU || ( CONFIG_QEMU_HARDWARE && GET_GLOBAL(PlatformRunningOn) & PF_QEMU); } static inline int runningOnXen(void) { return CONFIG_XEN && GET_GLOBAL(PlatformRunningOn) & PF_XEN; } static inline int runningOnKVM(void) { return CONFIG_QEMU && GET_GLOBAL(PlatformRunningOn) & PF_KVM; } // Common paravirt ports. #define PORT_SMI_CMD 0x00b2 #define PORT_SMI_STATUS 0x00b3 #define PORT_QEMU_CFG_CTL 0x0510 #define PORT_QEMU_CFG_DATA 0x0511 #define PORT_QEMU_CFG_DMA_ADDR_HIGH 0x0514 #define PORT_QEMU_CFG_DMA_ADDR_LOW 0x0518 // QEMU_CFG_DMA_CONTROL bits #define QEMU_CFG_DMA_CTL_ERROR 0x01 #define QEMU_CFG_DMA_CTL_READ 0x02 #define QEMU_CFG_DMA_CTL_SKIP 0x04 #define QEMU_CFG_DMA_CTL_SELECT 0x08 // QEMU_CFG_DMA ID bit #define QEMU_CFG_VERSION_DMA 2 int qemu_cfg_dma_enabled(void); void qemu_preinit(void); void qemu_platform_setup(void); void qemu_cfg_init(void); #endif