|
|
1.1 root 1: #ifndef __PV_H
2: #define __PV_H
3:
1.1.1.4 root 4: #include "config.h" // CONFIG_COREBOOT
1.1 root 5: #include "util.h"
6:
7: /* This CPUID returns the signature 'KVMKVMKVM' in ebx, ecx, and edx. It
8: * should be used to determine that a VM is running under KVM.
9: */
10: #define KVM_CPUID_SIGNATURE 0x40000000
11:
12: static inline int kvm_para_available(void)
13: {
1.1.1.5 ! root 14: if (CONFIG_COREBOOT)
! 15: return 0;
1.1 root 16: unsigned int eax, ebx, ecx, edx;
17: char signature[13];
18:
19: cpuid(KVM_CPUID_SIGNATURE, &eax, &ebx, &ecx, &edx);
20: memcpy(signature + 0, &ebx, 4);
21: memcpy(signature + 4, &ecx, 4);
22: memcpy(signature + 8, &edx, 4);
23: signature[12] = 0;
24:
25: if (strcmp(signature, "KVMKVMKVM") == 0)
26: return 1;
27:
28: return 0;
29: }
30:
1.1.1.5 ! root 31: #define QEMU_CFG_SIGNATURE 0x00
! 32: #define QEMU_CFG_ID 0x01
! 33: #define QEMU_CFG_UUID 0x02
! 34: #define QEMU_CFG_NUMA 0x0d
! 35: #define QEMU_CFG_BOOT_MENU 0x0e
! 36: #define QEMU_CFG_MAX_CPUS 0x0f
1.1 root 37: #define QEMU_CFG_FILE_DIR 0x19
1.1.1.5 ! root 38: #define QEMU_CFG_ARCH_LOCAL 0x8000
! 39: #define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0)
! 40: #define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1)
! 41: #define QEMU_CFG_IRQ0_OVERRIDE (QEMU_CFG_ARCH_LOCAL + 2)
! 42: #define QEMU_CFG_E820_TABLE (QEMU_CFG_ARCH_LOCAL + 3)
1.1 root 43:
44: extern int qemu_cfg_present;
45:
46: void qemu_cfg_port_probe(void);
47: int qemu_cfg_show_boot_menu(void);
48: void qemu_cfg_get_uuid(u8 *uuid);
49: int qemu_cfg_irq0_override(void);
50: u16 qemu_cfg_acpi_additional_tables(void);
51: u16 qemu_cfg_next_acpi_table_len(void);
52: void *qemu_cfg_next_acpi_table_load(void *addr, u16 len);
53: u16 qemu_cfg_smbios_entries(void);
54: size_t qemu_cfg_smbios_load_field(int type, size_t offset, void *addr);
55: int qemu_cfg_smbios_load_external(int type, char **p, unsigned *nr_structs,
56: unsigned *max_struct_size, char *end);
57: int qemu_cfg_get_numa_nodes(void);
58: void qemu_cfg_get_numa_data(u64 *data, int n);
59: u16 qemu_cfg_get_max_cpus(void);
60:
61: typedef struct QemuCfgFile {
62: u32 size; /* file size */
63: u16 select; /* write this to 0x510 to read it */
64: u16 reserved;
65: char name[56];
66: } QemuCfgFile;
67:
1.1.1.2 root 68: struct e820_reservation {
69: u64 address;
70: u64 length;
71: u32 type;
72: };
73:
74: u32 qemu_cfg_next_prefix_file(const char *prefix, u32 prevselect);
75: u32 qemu_cfg_find_file(const char *name);
76: int qemu_cfg_size_file(u32 select);
1.1.1.3 root 77: const char* qemu_cfg_name_file(u32 select);
1.1.1.2 root 78: int qemu_cfg_read_file(u32 select, void *dst, u32 maxlen);
79:
80: // Wrappers that select cbfs or qemu_cfg file interface.
81: static inline u32 romfile_findprefix(const char *prefix, u32 previd) {
82: if (CONFIG_COREBOOT)
83: return (u32)cbfs_findprefix(prefix, (void*)previd);
84: return qemu_cfg_next_prefix_file(prefix, previd);
85: }
86: static inline u32 romfile_find(const char *name) {
87: if (CONFIG_COREBOOT)
88: return (u32)cbfs_finddatafile(name);
89: return qemu_cfg_find_file(name);
90: }
91: static inline u32 romfile_size(u32 fileid) {
92: if (CONFIG_COREBOOT)
93: return cbfs_datasize((void*)fileid);
94: return qemu_cfg_size_file(fileid);
95: }
96: static inline int romfile_copy(u32 fileid, void *dst, u32 maxlen) {
97: if (CONFIG_COREBOOT)
98: return cbfs_copyfile((void*)fileid, dst, maxlen);
99: return qemu_cfg_read_file(fileid, dst, maxlen);
100: }
1.1.1.3 root 101: static inline const char* romfile_name(u32 fileid) {
102: if (CONFIG_COREBOOT)
103: return cbfs_filename((void*)fileid);
104: return qemu_cfg_name_file(fileid);
105: }
106: void *romfile_loadfile(const char *name, int *psize);
1.1.1.4 root 107: u64 romfile_loadint(const char *name, u64 defval);
1.1.1.2 root 108:
109: u32 qemu_cfg_e820_entries(void);
110: void* qemu_cfg_e820_load_next(void *addr);
1.1 root 111:
112: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.