qemu: add rom loading via fw_cfg
[seabios.git] / src / paravirt.h
1 #ifndef __PV_H
2 #define __PV_H
3
4 #include "util.h"
5
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.
8  */
9 #define KVM_CPUID_SIGNATURE     0x40000000
10
11 static inline int kvm_para_available(void)
12 {
13     unsigned int eax, ebx, ecx, edx;
14     char signature[13];
15
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);
20     signature[12] = 0;
21
22     if (strcmp(signature, "KVMKVMKVM") == 0)
23         return 1;
24
25     return 0;
26 }
27
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
40 extern int qemu_cfg_present;
41
42 void qemu_cfg_port_probe(void);
43 int qemu_cfg_show_boot_menu(void);
44 void qemu_cfg_get_uuid(u8 *uuid);
45 int qemu_cfg_irq0_override(void);
46 u16 qemu_cfg_acpi_additional_tables(void);
47 u16 qemu_cfg_next_acpi_table_len(void);
48 void *qemu_cfg_next_acpi_table_load(void *addr, u16 len);
49 u16 qemu_cfg_smbios_entries(void);
50 size_t qemu_cfg_smbios_load_field(int type, size_t offset, void *addr);
51 int qemu_cfg_smbios_load_external(int type, char **p, unsigned *nr_structs,
52                                   unsigned *max_struct_size, char *end);
53 int qemu_cfg_get_numa_nodes(void);
54 void qemu_cfg_get_numa_data(u64 *data, int n);
55 u16 qemu_cfg_get_max_cpus(void);
56
57 typedef struct QemuCfgFile {
58     u32  size;        /* file size */
59     u16  select;      /* write this to 0x510 to read it */
60     u16  reserved;
61     char name[56];
62 } QemuCfgFile;
63
64 u16 qemu_cfg_first_file(QemuCfgFile *entry);
65 u16 qemu_cfg_next_file(QemuCfgFile *entry);
66 u32 qemu_cfg_read_file(QemuCfgFile *entry, void *dst, u32 maxlen);
67
68 #endif