6
/* This CPUID returns the signature 'KVMKVMKVM' in ebx, ecx, and edx. It
7
* should be used to determine that a VM is running under KVM.
9
#define KVM_CPUID_SIGNATURE 0x40000000
11
static inline int kvm_para_available(void)
13
unsigned int eax, ebx, ecx, edx;
16
cpuid(KVM_CPUID_SIGNATURE, &eax, &ebx, &ecx, &edx);
17
memcpy(signature + 0, &ebx, 4);
18
memcpy(signature + 4, &ecx, 4);
19
memcpy(signature + 8, &edx, 4);
22
if (strcmp(signature, "KVMKVMKVM") == 0)
28
#define QEMU_CFG_SIGNATURE 0x00
29
#define QEMU_CFG_ID 0x01
30
#define QEMU_CFG_UUID 0x02
31
#define QEMU_CFG_NUMA 0x0d
32
#define QEMU_CFG_BOOT_MENU 0x0e
33
#define QEMU_CFG_MAX_CPUS 0x0f
34
#define QEMU_CFG_FILE_DIR 0x19
35
#define QEMU_CFG_ARCH_LOCAL 0x8000
36
#define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0)
37
#define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1)
38
#define QEMU_CFG_IRQ0_OVERRIDE (QEMU_CFG_ARCH_LOCAL + 2)
39
#define QEMU_CFG_E820_TABLE (QEMU_CFG_ARCH_LOCAL + 3)
41
extern int qemu_cfg_present;
43
void qemu_cfg_port_probe(void);
44
int qemu_cfg_show_boot_menu(void);
45
void qemu_cfg_get_uuid(u8 *uuid);
46
int qemu_cfg_irq0_override(void);
47
u16 qemu_cfg_acpi_additional_tables(void);
48
u16 qemu_cfg_next_acpi_table_len(void);
49
void *qemu_cfg_next_acpi_table_load(void *addr, u16 len);
50
u16 qemu_cfg_smbios_entries(void);
51
size_t qemu_cfg_smbios_load_field(int type, size_t offset, void *addr);
52
int qemu_cfg_smbios_load_external(int type, char **p, unsigned *nr_structs,
53
unsigned *max_struct_size, char *end);
54
int qemu_cfg_get_numa_nodes(void);
55
void qemu_cfg_get_numa_data(u64 *data, int n);
56
u16 qemu_cfg_get_max_cpus(void);
58
typedef struct QemuCfgFile {
59
u32 size; /* file size */
60
u16 select; /* write this to 0x510 to read it */
65
struct e820_reservation {
71
u32 qemu_cfg_next_prefix_file(const char *prefix, u32 prevselect);
72
u32 qemu_cfg_find_file(const char *name);
73
int qemu_cfg_size_file(u32 select);
74
int qemu_cfg_read_file(u32 select, void *dst, u32 maxlen);
76
// Wrappers that select cbfs or qemu_cfg file interface.
77
static inline u32 romfile_findprefix(const char *prefix, u32 previd) {
79
return (u32)cbfs_findprefix(prefix, (void*)previd);
80
return qemu_cfg_next_prefix_file(prefix, previd);
82
static inline u32 romfile_find(const char *name) {
84
return (u32)cbfs_finddatafile(name);
85
return qemu_cfg_find_file(name);
87
static inline u32 romfile_size(u32 fileid) {
89
return cbfs_datasize((void*)fileid);
90
return qemu_cfg_size_file(fileid);
92
static inline int romfile_copy(u32 fileid, void *dst, u32 maxlen) {
94
return cbfs_copyfile((void*)fileid, dst, maxlen);
95
return qemu_cfg_read_file(fileid, dst, maxlen);
98
u32 qemu_cfg_e820_entries(void);
99
void* qemu_cfg_e820_load_next(void *addr);