|
|
1.1 root 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)
1.1.1.2 ! root 39: #define QEMU_CFG_E820_TABLE (QEMU_CFG_ARCH_LOCAL + 3)
1.1 root 40:
41: extern int qemu_cfg_present;
42:
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);
57:
58: typedef struct QemuCfgFile {
59: u32 size; /* file size */
60: u16 select; /* write this to 0x510 to read it */
61: u16 reserved;
62: char name[56];
63: } QemuCfgFile;
64:
1.1.1.2 ! root 65: struct e820_reservation {
! 66: u64 address;
! 67: u64 length;
! 68: u32 type;
! 69: };
! 70:
! 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);
! 75:
! 76: // Wrappers that select cbfs or qemu_cfg file interface.
! 77: static inline u32 romfile_findprefix(const char *prefix, u32 previd) {
! 78: if (CONFIG_COREBOOT)
! 79: return (u32)cbfs_findprefix(prefix, (void*)previd);
! 80: return qemu_cfg_next_prefix_file(prefix, previd);
! 81: }
! 82: static inline u32 romfile_find(const char *name) {
! 83: if (CONFIG_COREBOOT)
! 84: return (u32)cbfs_finddatafile(name);
! 85: return qemu_cfg_find_file(name);
! 86: }
! 87: static inline u32 romfile_size(u32 fileid) {
! 88: if (CONFIG_COREBOOT)
! 89: return cbfs_datasize((void*)fileid);
! 90: return qemu_cfg_size_file(fileid);
! 91: }
! 92: static inline int romfile_copy(u32 fileid, void *dst, u32 maxlen) {
! 93: if (CONFIG_COREBOOT)
! 94: return cbfs_copyfile((void*)fileid, dst, maxlen);
! 95: return qemu_cfg_read_file(fileid, dst, maxlen);
! 96: }
! 97:
! 98: u32 qemu_cfg_e820_entries(void);
! 99: void* qemu_cfg_e820_load_next(void *addr);
1.1 root 100:
101: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.