Commit e37630ca authored by Anthony Liguori's avatar Anthony Liguori
Browse files

xen: groundwork for xen support (Gerd Hoffmann)



- configure script and build system changes.
- wind up new machine type.
- add -xen-* command line options.

Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
Signed-off-by: default avatarAnthony Liguori <aliguori@us.ibm.com>


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7219 c046a42c-6fe2-441c-8c8c-71466251a162
parent b194f610
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -560,6 +560,13 @@ ifdef CONFIG_BLUEZ
LIBS += $(CONFIG_BLUEZ_LIBS)
endif

# xen backend driver support
XEN_OBJS := xen_machine_pv.o
ifeq ($(CONFIG_XEN), yes)
  OBJS += $(XEN_OBJS)
  LIBS += $(XEN_LIBS)
endif

# SCSI layer
OBJS+= lsi53c895a.o esp.o

+34 −0
Original line number Diff line number Diff line
@@ -191,6 +191,7 @@ aix="no"
blobs="yes"
fdt="yes"
sdl_x11="no"
xen="yes"
pkgversion=""

# OS specific
@@ -421,6 +422,8 @@ for opt do
  ;;
  --disable-kqemu) kqemu="no"
  ;;
  --disable-xen) xen="no"
  ;;
  --disable-brlapi) brlapi="no"
  ;;
  --disable-bluez) bluez="no"
@@ -586,6 +589,7 @@ echo " Available drivers: $audio_possible_drivers"
echo "  --audio-card-list=LIST   set list of emulated audio cards [$audio_card_list]"
echo "                           Available cards: $audio_possible_cards"
echo "  --enable-mixemu          enable mixer emulation"
echo "  --disable-xen            disable xen backend driver support"
echo "  --disable-brlapi         disable BrlAPI"
echo "  --disable-vnc-tls        disable TLS encryption for VNC server"
echo "  --disable-vnc-sasl       disable SASL encryption for VNC server"
@@ -801,6 +805,22 @@ else
    exit 1
fi

##########################################
# xen probe

if test "$xen" = "yes" ; then
cat > $TMPC <<EOF
#include <xenctrl.h>
#include <xs.h>
int main(void) { xs_daemon_open; xc_interface_open; }
EOF
   if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC -lxenstore -lxenctrl 2> /dev/null ; then
      :
   else
      xen="no"
   fi
fi

##########################################
# SDL probe

@@ -1296,6 +1316,7 @@ if test -n "$sparc_cpu"; then
    echo "Target Sparc Arch $sparc_cpu"
fi
echo "kqemu support     $kqemu"
echo "xen support       $xen"
echo "brlapi support    $brlapi"
echo "Documentation     $build_docs"
[ ! -z "$uname_release" ] && \
@@ -1612,6 +1633,9 @@ if test "$bluez" = "yes" ; then
  echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_mak
  echo "#define CONFIG_BLUEZ 1" >> $config_h
fi
if test "$xen" = "yes" ; then
  echo "XEN_LIBS=-lxenstore -lxenctrl" >> $config_mak
fi
if test "$aio" = "yes" ; then
  echo "#define CONFIG_AIO 1" >> $config_h
  echo "CONFIG_AIO=yes" >> $config_mak
@@ -1777,6 +1801,11 @@ case "$target_cpu" in
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
      echo "#define CONFIG_KVM 1" >> $config_h
    fi
    if test "$xen" = "yes" -a "$target_softmmu" = "yes";
    then
      echo "CONFIG_XEN=yes" >> $config_mak
      echo "#define CONFIG_XEN 1" >> $config_h
    fi
  ;;
  x86_64)
    echo "TARGET_ARCH=x86_64" >> $config_mak
@@ -1793,6 +1822,11 @@ case "$target_cpu" in
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
      echo "#define CONFIG_KVM 1" >> $config_h
    fi
    if test "$xen" = "yes" -a "$target_softmmu" = "yes"
    then
      echo "CONFIG_XEN=yes" >> $config_mak
      echo "#define CONFIG_XEN 1" >> $config_h
    fi
  ;;
  alpha)
    echo "TARGET_ARCH=alpha" >> $config_mak
+3 −0
Original line number Diff line number Diff line
@@ -32,6 +32,9 @@ extern QEMUMachine axisdev88_machine;
extern QEMUMachine pc_machine;
extern QEMUMachine isapc_machine;

/* xen_machine.c */
extern QEMUMachine xenpv_machine;

/* ppc.c */
extern QEMUMachine prep_machine;
extern QEMUMachine core99_machine;

hw/xen.h

0 → 100644
+20 −0
Original line number Diff line number Diff line
#ifndef QEMU_HW_XEN_H
#define QEMU_HW_XEN_H 1
/*
 * public xen header
 *   stuff needed outside xen-*.c, i.e. interfaces to qemu.
 *   must not depend on any xen headers being present in
 *   /usr/include/xen, so it can be included unconditionally.
 */

/* xen-machine.c */
enum xen_mode {
    XEN_EMULATE = 0,  // xen emulation, using xenner (default)
    XEN_CREATE,       // create xen domain
    XEN_ATTACH        // attach to xen domain created by xend
};

extern uint32_t xen_domid;
extern enum xen_mode xen_mode;

#endif /* QEMU_HW_XEN_H */

hw/xen_machine_pv.c

0 → 100644
+60 −0
Original line number Diff line number Diff line
/*
 * QEMU Xen PV Machine
 *
 * Copyright (c) 2007 Red Hat
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#include "hw.h"
#include "pc.h"
#include "sysemu.h"
#include "boards.h"
#include "xen.h"

uint32_t xen_domid;
enum xen_mode xen_mode = XEN_EMULATE;

static void xen_init_pv(ram_addr_t ram_size, int vga_ram_size,
			const char *boot_device,
			const char *kernel_filename,
			const char *kernel_cmdline,
			const char *initrd_filename,
			const char *cpu_model)
{
    CPUState *env;

    /* Initialize a dummy CPU */
    if (cpu_model == NULL) {
#ifdef TARGET_X86_64
        cpu_model = "qemu64";
#else
        cpu_model = "qemu32";
#endif
    }
    env = cpu_init(cpu_model);
    env->halted = 1;
}

QEMUMachine xenpv_machine = {
    .name = "xenpv",
    .desc = "Xen Para-virtualized PC",
    .init = xen_init_pv,
    .max_cpus = 1,
};
Loading