[SeaBIOS] [PATCH 3/6] Add runningOnQEMU() and runningOnXEN() ror runtime platform detection.
Fred .
eldmannen at gmail.com
Sat Feb 9 20:42:31 CET 2013
runningOnXEN()
It is Xen not XEN. It is not capitalized.
Also, hypercall_xen_version() has underscore, but runningOnXEN() has
camelcase.
Maybe runningOnXEN() should be named running_on_Xen() ?
On Sat, Feb 9, 2013 at 8:08 PM, Kevin O'Connor <kevin at koconnor.net> wrote:
> Introduce standard for performing and inspecting the run-time
> detection of para-virtualized environments.
>
> Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
> ---
> src/Kconfig | 14 +++++++++++---
> src/misc.c | 2 ++
> src/paravirt.c | 5 +++++
> src/paravirt.h | 20 ++++++++++++++++++--
> src/xen.c | 7 +++++--
> 5 files changed, 41 insertions(+), 7 deletions(-)
>
> diff --git a/src/Kconfig b/src/Kconfig
> index bbcefe0..6fd45b4 100644
> --- a/src/Kconfig
> +++ b/src/Kconfig
> @@ -14,9 +14,10 @@ choice
> Configure as a coreboot payload.
>
> config QEMU
> - bool "Build for QEMU"
> + bool "Build for QEMU/XEN/KVM/Bochs"
> + select QEMU_HARDWARE
> help
> - Configure as QEMU bios.
> + Configure for an emulated machine (QEMU, XEN, KVM, or Bochs).
>
> config CSM
> bool "Build as Compatibilty Support Module for EFI BIOS"
> @@ -26,9 +27,16 @@ choice
>
> endchoice
>
> + config QEMU_HARDWARE
> + bool "Support hardware found on emulators (QEMU/XEN/KVM/Bochs)"
> if !QEMU
> + default n
> + help
> + Support virtual hardware when the code detects it is
> + running on an emulator.
> +
> config XEN
> depends on QEMU
> - bool "Build for Xen HVM"
> + bool "Support Xen HVM"
> default y
> help
> Configure to be used by xen hvmloader, for a HVM guest.
> diff --git a/src/misc.c b/src/misc.c
> index bcc450a..3b2ffc1 100644
> --- a/src/misc.c
> +++ b/src/misc.c
> @@ -16,6 +16,8 @@ u32 RamSize VAR16VISIBLE;
> u64 RamSizeOver4G;
> // Space for bios tables built an run-time.
> char BiosTableSpace[CONFIG_MAX_BIOSTABLE] __aligned(MALLOC_MIN_ALIGN)
> VAR16VISIBLE;
> +// Type of emulator platform.
> +int PlatformRunningOn VAR16VISIBLE;
>
>
> /****************************************************************
> diff --git a/src/paravirt.c b/src/paravirt.c
> index 9022186..6e230ee 100644
> --- a/src/paravirt.c
> +++ b/src/paravirt.c
> @@ -24,6 +24,11 @@ int qemu_cfg_present;
> void
> qemu_ramsize_preinit(void)
> {
> + if (!CONFIG_QEMU)
> + return;
> +
> + PlatformRunningOn = PF_QEMU;
> +
> // On emulators, get memory size from nvram.
> u32 rs = ((inb_cmos(CMOS_MEM_EXTMEM2_LOW) << 16)
> | (inb_cmos(CMOS_MEM_EXTMEM2_HIGH) << 24));
> diff --git a/src/paravirt.h b/src/paravirt.h
> index 4f2d5b8..d32ca13 100644
> --- a/src/paravirt.h
> +++ b/src/paravirt.h
> @@ -1,8 +1,24 @@
> #ifndef __PV_H
> #define __PV_H
>
> -#include "config.h" // CONFIG_COREBOOT
> -#include "util.h"
> +#include "config.h" // CONFIG_*
> +#include "util.h" // memcpy
> +#include "biosvar.h" // GET_GLOBAL
> +
> +// Types of paravirtualized platforms.
> +#define PF_QEMU (1<<0)
> +#define PF_XEN (1<<1)
> +
> +// misc.c
> +extern int PlatformRunningOn;
> +
> +static inline int runningOnQEMU(void) {
> + return CONFIG_QEMU || (
> + CONFIG_QEMU_HARDWARE && GET_GLOBAL(PlatformRunningOn) & PF_QEMU);
> +}
> +static inline int runningOnXen(void) {
> + return CONFIG_XEN && GET_GLOBAL(PlatformRunningOn) & PF_XEN;
> +}
>
> /* This CPUID returns the signature 'KVMKVMKVM' in ebx, ecx, and edx. It
> * should be used to determine that a VM is running under KVM.
> diff --git a/src/xen.c b/src/xen.c
> index c9759f0..e075af2 100644
> --- a/src/xen.c
> +++ b/src/xen.c
> @@ -6,7 +6,7 @@
>
> #include "config.h"
> #include "xen.h"
> -
> +#include "paravirt.h" // PlatformRunningOn
> #include "memmap.h" // add_e820
> #include "types.h" // ASM32FLAT
> #include "util.h" // copy_acpi_rsdp
> @@ -76,8 +76,11 @@ void xen_preinit(void)
> break;
> }
> }
> - if (!xen_cpuid_base)
> + if (!xen_cpuid_base) {
> dprintf(1, "No Xen hypervisor found.\n");
> + return;
> + }
> + PlatformRunningOn = PF_QEMU|PF_XEN;
> }
>
> static int hypercall_xen_version( int cmd, void *arg)
> --
> 1.7.11.7
>
>
> _______________________________________________
> SeaBIOS mailing list
> SeaBIOS at seabios.org
> http://www.seabios.org/mailman/listinfo/seabios
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.seabios.org/pipermail/seabios/attachments/20130209/1df01d58/attachment.html>
More information about the SeaBIOS
mailing list