<div dir="ltr"><div>I see functions named coreboot_preinit() with underscore.<br>Then I see functions named runningOnCoreboot() with camelcase.<br><br></div><div>This is inconsistent naming.<br></div><div><br></div>Shouldn't you be sticking to some coding convention or naming guideline?<br>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Feb 8, 2013 at 1:56 PM, Fred . <span dir="ltr"><<a href="mailto:eldmannen@gmail.com" target="_blank">eldmannen@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div>Maybe would be nice with a:<br>int get_platform();<br></div>0 = QEMU<br></div>1 = Xen<br>
</div>2 = Coreboot<br></div>3 = CSM<br><br>Then you have one get_platform() function, instead of four separate startedOnQEMU(), startedOnCoreboot, startedOnCSM, etc functions.<br>
</div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Feb 8, 2013 at 6:07 AM, Kevin O'Connor <span dir="ltr"><<a href="mailto:kevin@koconnor.net" target="_blank">kevin@koconnor.net</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Introduce startedOnQEMU()/startedOnCoreboot()/etc. calls to enable<br>
code to determine what platform invoked the initial SeaBIOS startup.<br>
Also introduce runningOnQEMU()/etc. calls for cases where SeaBIOS can<br>
detect it is running on a platform even though it wasn't directly<br>
launched by that platform (eg, Xen may have started SeaBIOS, but Xen<br>
may be running under qemu).<br>
<br>
Signed-off-by: Kevin O'Connor <<a href="mailto:kevin@koconnor.net" target="_blank">kevin@koconnor.net</a>><br>
---<br>
 src/coreboot.c |  3 ++<br>
 src/csm.c      |  2 ++<br>
 src/paravirt.c | 10 +++++--<br>
 src/paravirt.h | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--<br>
 src/xen.c      |  1 +<br>
 5 files changed, 104 insertions(+), 5 deletions(-)<br>
<br>
diff --git a/src/coreboot.c b/src/coreboot.c<br>
index 57c9737..40a7e72 100644<br>
--- a/src/coreboot.c<br>
+++ b/src/coreboot.c<br>
@@ -12,6 +12,7 @@<br>
 #include "boot.h" // boot_add_cbfs<br>
 #include "disk.h" // MAXDESCSIZE<br>
 #include "config.h" // CONFIG_*<br>
+#include "paravirt.h" // PlatformStartedOn<br>
<br>
<br>
 /****************************************************************<br>
@@ -145,6 +146,8 @@ coreboot_preinit(void)<br>
     if (!cbm)<br>
         goto fail;<br>
<br>
+    PlatformStartedOn = PlatformRunningOn = PF_COREBOOT;<br>
+<br>
     u64 maxram = 0, maxram_over4G = 0;<br>
     int i, count = MEM_RANGE_COUNT(cbm);<br>
     for (i=0; i<count; i++) {<br>
diff --git a/src/csm.c b/src/csm.c<br>
index 169b608..c8069d2 100644<br>
--- a/src/csm.c<br>
+++ b/src/csm.c<br>
@@ -17,6 +17,7 @@<br>
 #include "boot.h"<br>
 #include "smbios.h"<br>
 #include "pic.h"<br>
+#include "paravirt.h" // PlatformStartedOn<br>
<br>
 struct rsdp_descriptor VAR32FLATVISIBLE __aligned(16) csm_rsdp;<br>
<br>
@@ -74,6 +75,7 @@ handle_csm_0000(struct bregs *regs)<br>
     dprintf(3, "LoPmmMemory     %08x\n", csm_init_table->LowPmmMemory);<br>
     dprintf(3, "LoPmmMemorySize %08x\n", csm_init_table->LowPmmMemorySizeInBytes);<br>
<br>
+    PlatformStartedOn = PlatformRunningOn = PF_CSM;<br>
     csm_malloc_preinit(csm_init_table->LowPmmMemory,<br>
                        csm_init_table->LowPmmMemorySizeInBytes,<br>
                        csm_init_table->HiPmmMemory,<br>
diff --git a/src/paravirt.c b/src/paravirt.c<br>
index ebab256..35b7c11 100644<br>
--- a/src/paravirt.c<br>
+++ b/src/paravirt.c<br>
@@ -19,6 +19,8 @@<br>
 #include "mptable.h" // mptable_setup<br>
 #include "pci.h" // create_pirtable<br>
<br>
+int PlatformStartedOn, PlatformRunningOn;<br>
+<br>
 int qemu_cfg_present;<br>
<br>
 void<br>
@@ -27,6 +29,7 @@ qemu_preinit(void)<br>
     if (!CONFIG_QEMU)<br>
         return;<br>
<br>
+    PlatformStartedOn = PlatformRunningOn = PF_QEMU;<br>
     qemu_cfg_preinit();<br>
<br>
     // On emulators, get memory size from nvram.<br>
@@ -108,12 +111,13 @@ qemu_cfg_read_entry(void *buf, int e, int len)<br>
<br>
 void qemu_cfg_preinit(void)<br>
 {<br>
+    if (!CONFIG_QEMU)<br>
+        return;<br>
+    PlatformRunningOn |= PF_QEMU;<br>
+<br>
     char *sig = "QEMU";<br>
     int i;<br>
<br>
-    if (CONFIG_COREBOOT)<br>
-        return;<br>
-<br>
     qemu_cfg_present = 1;<br>
<br>
     qemu_cfg_select(QEMU_CFG_SIGNATURE);<br>
diff --git a/src/paravirt.h b/src/paravirt.h<br>
index 2448993..3b00697 100644<br>
--- a/src/paravirt.h<br>
+++ b/src/paravirt.h<br>
@@ -1,8 +1,97 @@<br>
 #ifndef __PV_H<br>
 #define __PV_H<br>
<br>
-#include "config.h" // CONFIG_COREBOOT<br>
-#include "util.h"<br>
+#include "config.h" // CONFIG_*<br>
+#include "util.h" // memcpy<br>
+<br>
+<br>
+/****************************************************************<br>
+ * Current platform detection<br>
+ ****************************************************************/<br>
+<br>
+#define PF_QEMU     (1<<0)<br>
+#define PF_COREBOOT (1<<1)<br>
+#define PF_XEN      (1<<2)<br>
+#define PF_CSM      (1<<3)<br>
+<br>
+extern int PlatformStartedOn, PlatformRunningOn;<br>
+<br>
+static inline int startedOnQEMU(void)<br>
+{<br>
+    if (!CONFIG_QEMU)<br>
+        return 0;<br>
+    if (!CONFIG_COREBOOT && !CONFIG_XEN && !CONFIG_CSM)<br>
+        return 1;<br>
+    return PlatformStartedOn == PF_QEMU;<br>
+}<br>
+<br>
+static inline int startedOnCoreboot(void)<br>
+{<br>
+    if (!CONFIG_COREBOOT)<br>
+        return 0;<br>
+    if (!CONFIG_QEMU && !CONFIG_XEN && !CONFIG_CSM)<br>
+        return 1;<br>
+    return PlatformStartedOn == PF_COREBOOT;<br>
+}<br>
+<br>
+static inline int startedOnXen(void)<br>
+{<br>
+    if (!CONFIG_XEN)<br>
+        return 0;<br>
+    if (!CONFIG_QEMU && !CONFIG_COREBOOT && !CONFIG_CSM)<br>
+        return 1;<br>
+    return PlatformStartedOn == PF_XEN;<br>
+}<br>
+<br>
+static inline int startedOnCSM(void)<br>
+{<br>
+    if (!CONFIG_CSM)<br>
+        return 0;<br>
+    if (!CONFIG_QEMU && !CONFIG_COREBOOT && !CONFIG_XEN)<br>
+        return 1;<br>
+    return PlatformStartedOn == PF_CSM;<br>
+}<br>
+<br>
+static inline int runningOnQEMU(void)<br>
+{<br>
+    if (!CONFIG_QEMU)<br>
+        return 0;<br>
+    if (!CONFIG_COREBOOT && !CONFIG_XEN && !CONFIG_CSM)<br>
+        return 1;<br>
+    return PlatformRunningOn & PF_QEMU;<br>
+}<br>
+<br>
+static inline int runningOnCoreboot(void)<br>
+{<br>
+    if (!CONFIG_COREBOOT)<br>
+        return 0;<br>
+    if (!CONFIG_QEMU && !CONFIG_XEN && !CONFIG_CSM)<br>
+        return 1;<br>
+    return PlatformRunningOn & PF_COREBOOT;<br>
+}<br>
+<br>
+static inline int runningOnXen(void)<br>
+{<br>
+    if (!CONFIG_XEN)<br>
+        return 0;<br>
+    if (!CONFIG_QEMU && !CONFIG_COREBOOT && !CONFIG_CSM)<br>
+        return 1;<br>
+    return PlatformRunningOn & PF_XEN;<br>
+}<br>
+<br>
+static inline int runningOnCSM(void)<br>
+{<br>
+    if (!CONFIG_CSM)<br>
+        return 0;<br>
+    if (!CONFIG_QEMU && !CONFIG_COREBOOT && !CONFIG_XEN)<br>
+        return 1;<br>
+    return PlatformRunningOn & PF_CSM;<br>
+}<br>
+<br>
+<br>
+/****************************************************************<br>
+ * KVM/QEMU firmware<br>
+ ****************************************************************/<br>
<br>
 /* This CPUID returns the signature 'KVMKVMKVM' in ebx, ecx, and edx.  It<br>
  * should be used to determine that a VM is running under KVM.<br>
diff --git a/src/xen.c b/src/xen.c<br>
index a506b42..5122a3c 100644<br>
--- a/src/xen.c<br>
+++ b/src/xen.c<br>
@@ -81,6 +81,7 @@ void xen_preinit(void)<br>
         return;<br>
     }<br>
<br>
+    PlatformStartedOn = PlatformRunningOn = PF_XEN;<br>
     qemu_cfg_preinit();<br>
<br>
     u64 maxram = 0, maxram_over4G = 0;<br>
<span><font color="#888888">--<br>
1.7.11.7<br>
<br>
<br>
_______________________________________________<br>
SeaBIOS mailing list<br>
<a href="mailto:SeaBIOS@seabios.org" target="_blank">SeaBIOS@seabios.org</a><br>
<a href="http://www.seabios.org/mailman/listinfo/seabios" target="_blank">http://www.seabios.org/mailman/listinfo/seabios</a><br>
</font></span></blockquote></div><br></div>
</div></div></blockquote></div><br></div>