[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