Revision e37630ca

b/Makefile.target
560 560
LIBS += $(CONFIG_BLUEZ_LIBS)
561 561
endif
562 562

  
563
# xen backend driver support
564
XEN_OBJS := xen_machine_pv.o
565
ifeq ($(CONFIG_XEN), yes)
566
  OBJS += $(XEN_OBJS)
567
  LIBS += $(XEN_LIBS)
568
endif
569

  
563 570
# SCSI layer
564 571
OBJS+= lsi53c895a.o esp.o
565 572

  
b/configure
191 191
blobs="yes"
192 192
fdt="yes"
193 193
sdl_x11="no"
194
xen="yes"
194 195
pkgversion=""
195 196

  
196 197
# OS specific
......
421 422
  ;;
422 423
  --disable-kqemu) kqemu="no"
423 424
  ;;
425
  --disable-xen) xen="no"
426
  ;;
424 427
  --disable-brlapi) brlapi="no"
425 428
  ;;
426 429
  --disable-bluez) bluez="no"
......
586 589
echo "  --audio-card-list=LIST   set list of emulated audio cards [$audio_card_list]"
587 590
echo "                           Available cards: $audio_possible_cards"
588 591
echo "  --enable-mixemu          enable mixer emulation"
592
echo "  --disable-xen            disable xen backend driver support"
589 593
echo "  --disable-brlapi         disable BrlAPI"
590 594
echo "  --disable-vnc-tls        disable TLS encryption for VNC server"
591 595
echo "  --disable-vnc-sasl       disable SASL encryption for VNC server"
......
802 806
fi
803 807

  
804 808
##########################################
809
# xen probe
810

  
811
if test "$xen" = "yes" ; then
812
cat > $TMPC <<EOF
813
#include <xenctrl.h>
814
#include <xs.h>
815
int main(void) { xs_daemon_open; xc_interface_open; }
816
EOF
817
   if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC -lxenstore -lxenctrl 2> /dev/null ; then
818
      :
819
   else
820
      xen="no"
821
   fi
822
fi
823

  
824
##########################################
805 825
# SDL probe
806 826

  
807 827
sdl_too_old=no
......
1296 1316
    echo "Target Sparc Arch $sparc_cpu"
1297 1317
fi
1298 1318
echo "kqemu support     $kqemu"
1319
echo "xen support       $xen"
1299 1320
echo "brlapi support    $brlapi"
1300 1321
echo "Documentation     $build_docs"
1301 1322
[ ! -z "$uname_release" ] && \
......
1612 1633
  echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_mak
1613 1634
  echo "#define CONFIG_BLUEZ 1" >> $config_h
1614 1635
fi
1636
if test "$xen" = "yes" ; then
1637
  echo "XEN_LIBS=-lxenstore -lxenctrl" >> $config_mak
1638
fi
1615 1639
if test "$aio" = "yes" ; then
1616 1640
  echo "#define CONFIG_AIO 1" >> $config_h
1617 1641
  echo "CONFIG_AIO=yes" >> $config_mak
......
1777 1801
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
1778 1802
      echo "#define CONFIG_KVM 1" >> $config_h
1779 1803
    fi
1804
    if test "$xen" = "yes" -a "$target_softmmu" = "yes";
1805
    then
1806
      echo "CONFIG_XEN=yes" >> $config_mak
1807
      echo "#define CONFIG_XEN 1" >> $config_h
1808
    fi
1780 1809
  ;;
1781 1810
  x86_64)
1782 1811
    echo "TARGET_ARCH=x86_64" >> $config_mak
......
1793 1822
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
1794 1823
      echo "#define CONFIG_KVM 1" >> $config_h
1795 1824
    fi
1825
    if test "$xen" = "yes" -a "$target_softmmu" = "yes"
1826
    then
1827
      echo "CONFIG_XEN=yes" >> $config_mak
1828
      echo "#define CONFIG_XEN 1" >> $config_h
1829
    fi
1796 1830
  ;;
1797 1831
  alpha)
1798 1832
    echo "TARGET_ARCH=alpha" >> $config_mak
b/hw/boards.h
32 32
extern QEMUMachine pc_machine;
33 33
extern QEMUMachine isapc_machine;
34 34

  
35
/* xen_machine.c */
36
extern QEMUMachine xenpv_machine;
37

  
35 38
/* ppc.c */
36 39
extern QEMUMachine prep_machine;
37 40
extern QEMUMachine core99_machine;
b/hw/xen.h
1
#ifndef QEMU_HW_XEN_H
2
#define QEMU_HW_XEN_H 1
3
/*
4
 * public xen header
5
 *   stuff needed outside xen-*.c, i.e. interfaces to qemu.
6
 *   must not depend on any xen headers being present in
7
 *   /usr/include/xen, so it can be included unconditionally.
8
 */
9

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

  
17
extern uint32_t xen_domid;
18
extern enum xen_mode xen_mode;
19

  
20
#endif /* QEMU_HW_XEN_H */
b/hw/xen_machine_pv.c
1
/*
2
 * QEMU Xen PV Machine
3
 *
4
 * Copyright (c) 2007 Red Hat
5
 *
6
 * Permission is hereby granted, free of charge, to any person obtaining a copy
7
 * of this software and associated documentation files (the "Software"), to deal
8
 * in the Software without restriction, including without limitation the rights
9
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
 * copies of the Software, and to permit persons to whom the Software is
11
 * furnished to do so, subject to the following conditions:
12
 *
13
 * The above copyright notice and this permission notice shall be included in
14
 * all copies or substantial portions of the Software.
15
 *
16
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
 * THE SOFTWARE.
23
 */
24

  
25
#include "hw.h"
26
#include "pc.h"
27
#include "sysemu.h"
28
#include "boards.h"
29
#include "xen.h"
30

  
31
uint32_t xen_domid;
32
enum xen_mode xen_mode = XEN_EMULATE;
33

  
34
static void xen_init_pv(ram_addr_t ram_size, int vga_ram_size,
35
			const char *boot_device,
36
			const char *kernel_filename,
37
			const char *kernel_cmdline,
38
			const char *initrd_filename,
39
			const char *cpu_model)
40
{
41
    CPUState *env;
42

  
43
    /* Initialize a dummy CPU */
44
    if (cpu_model == NULL) {
45
#ifdef TARGET_X86_64
46
        cpu_model = "qemu64";
47
#else
48
        cpu_model = "qemu32";
49
#endif
50
    }
51
    env = cpu_init(cpu_model);
52
    env->halted = 1;
53
}
54

  
55
QEMUMachine xenpv_machine = {
56
    .name = "xenpv",
57
    .desc = "Xen Para-virtualized PC",
58
    .init = xen_init_pv,
59
    .max_cpus = 1,
60
};
b/qemu-options.hx
1348 1348
if KVM support is enabled when compiling.
1349 1349
ETEXI
1350 1350

  
1351
#ifdef CONFIG_XEN
1352
DEF("xen-domid", HAS_ARG, QEMU_OPTION_xen_domid,
1353
    "-xen-domid id   specify xen guest domain id\n")
1354
DEF("xen-create", 0, QEMU_OPTION_xen_create,
1355
    "-xen-create     create domain using xen hypercalls, bypassing xend\n"
1356
    "                warning: should not be used when xend is in use\n")
1357
DEF("xen-attach", 0, QEMU_OPTION_xen_attach,
1358
    "-xen-attach     attach to existing xen domain\n"
1359
    "                xend will use this when starting qemu\n")
1360
#endif
1361

  
1351 1362
DEF("no-reboot", 0, QEMU_OPTION_no_reboot, \
1352 1363
    "-no-reboot      exit instead of rebooting\n")
1353 1364
STEXI
b/target-i386/machine.c
9 9
{
10 10
    qemu_register_machine(&pc_machine);
11 11
    qemu_register_machine(&isapc_machine);
12
#ifdef CONFIG_XEN
13
    qemu_register_machine(&xenpv_machine);
14
#endif
12 15
}
13 16

  
14 17
static void cpu_put_seg(QEMUFile *f, SegmentCache *dt)
b/vl.c
139 139
#include "hw/baum.h"
140 140
#include "hw/bt.h"
141 141
#include "hw/smbios.h"
142
#include "hw/xen.h"
142 143
#include "bt-host.h"
143 144
#include "net.h"
144 145
#include "monitor.h"
......
5046 5047
                run_as = optarg;
5047 5048
                break;
5048 5049
#endif
5050
#ifdef CONFIG_XEN
5051
            case QEMU_OPTION_xen_domid:
5052
                xen_domid = atoi(optarg);
5053
                break;
5054
            case QEMU_OPTION_xen_create:
5055
                xen_mode = XEN_CREATE;
5056
                break;
5057
            case QEMU_OPTION_xen_attach:
5058
                xen_mode = XEN_ATTACH;
5059
                break;
5060
#endif
5049 5061
            }
5050 5062
        }
5051 5063
    }

Also available in: Unified diff