Detect CPUID instruction before using it.
[seabios.git] / src / paravirt.h
index 4cef48e16e51c6f00e357ba9a759eab92aa98f96..96740893b8ba790d07e76fa05f94a2d97a867a4f 100644 (file)
@@ -1,6 +1,7 @@
 #ifndef __PV_H
 #define __PV_H
 
+#include "config.h" // CONFIG_COREBOOT
 #include "util.h"
 
 /* This CPUID returns the signature 'KVMKVMKVM' in ebx, ecx, and edx.  It
@@ -10,6 +11,8 @@
 
 static inline int kvm_para_available(void)
 {
+    if (CONFIG_COREBOOT)
+        return 0;
     unsigned int eax, ebx, ecx, edx;
     char signature[13];
 
@@ -36,6 +39,7 @@ static inline int kvm_para_available(void)
 #define QEMU_CFG_ACPI_TABLES           (QEMU_CFG_ARCH_LOCAL + 0)
 #define QEMU_CFG_SMBIOS_ENTRIES                (QEMU_CFG_ARCH_LOCAL + 1)
 #define QEMU_CFG_IRQ0_OVERRIDE         (QEMU_CFG_ARCH_LOCAL + 2)
+#define QEMU_CFG_E820_TABLE            (QEMU_CFG_ARCH_LOCAL + 3)
 
 extern int qemu_cfg_present;
 
@@ -61,8 +65,48 @@ typedef struct QemuCfgFile {
     char name[56];
 } QemuCfgFile;
 
-u16 qemu_cfg_first_file(QemuCfgFile *entry);
-u16 qemu_cfg_next_file(QemuCfgFile *entry);
-u32 qemu_cfg_read_file(QemuCfgFile *entry, void *dst, u32 maxlen);
+struct e820_reservation {
+    u64 address;
+    u64 length;
+    u32 type;
+};
+
+u32 qemu_cfg_next_prefix_file(const char *prefix, u32 prevselect);
+u32 qemu_cfg_find_file(const char *name);
+int qemu_cfg_size_file(u32 select);
+const char* qemu_cfg_name_file(u32 select);
+int qemu_cfg_read_file(u32 select, void *dst, u32 maxlen);
+
+// Wrappers that select cbfs or qemu_cfg file interface.
+static inline u32 romfile_findprefix(const char *prefix, u32 previd) {
+    if (CONFIG_COREBOOT)
+        return (u32)cbfs_findprefix(prefix, (void*)previd);
+    return qemu_cfg_next_prefix_file(prefix, previd);
+}
+static inline u32 romfile_find(const char *name) {
+    if (CONFIG_COREBOOT)
+        return (u32)cbfs_finddatafile(name);
+    return qemu_cfg_find_file(name);
+}
+static inline u32 romfile_size(u32 fileid) {
+    if (CONFIG_COREBOOT)
+        return cbfs_datasize((void*)fileid);
+    return qemu_cfg_size_file(fileid);
+}
+static inline int romfile_copy(u32 fileid, void *dst, u32 maxlen) {
+    if (CONFIG_COREBOOT)
+        return cbfs_copyfile((void*)fileid, dst, maxlen);
+    return qemu_cfg_read_file(fileid, dst, maxlen);
+}
+static inline const char* romfile_name(u32 fileid) {
+    if (CONFIG_COREBOOT)
+        return cbfs_filename((void*)fileid);
+    return qemu_cfg_name_file(fileid);
+}
+void *romfile_loadfile(const char *name, int *psize);
+u64 romfile_loadint(const char *name, u64 defval);
+
+u32 qemu_cfg_e820_entries(void);
+void* qemu_cfg_e820_load_next(void *addr);
 
 #endif