cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

xen_machine_pv.c (2920B)


      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 "qemu/osdep.h"
     26#include "qemu/error-report.h"
     27#include "hw/boards.h"
     28#include "hw/xen/xen-legacy-backend.h"
     29#include "hw/xen/xen-bus.h"
     30#include "sysemu/block-backend.h"
     31#include "sysemu/sysemu.h"
     32
     33static void xen_init_pv(MachineState *machine)
     34{
     35    DriveInfo *dinfo;
     36    int i;
     37
     38    /* Initialize backend core & drivers */
     39    if (xen_be_init() != 0) {
     40        error_report("%s: xen backend core setup failed", __func__);
     41        exit(1);
     42    }
     43
     44    switch (xen_mode) {
     45    case XEN_ATTACH:
     46        /* nothing to do, libxl handles everything */
     47        break;
     48    case XEN_EMULATE:
     49        error_report("xen emulation not implemented (yet)");
     50        exit(1);
     51        break;
     52    default:
     53        error_report("unhandled xen_mode %d", xen_mode);
     54        exit(1);
     55        break;
     56    }
     57
     58    xen_be_register_common();
     59    xen_be_register("vfb", &xen_framebuffer_ops);
     60    xen_be_register("qnic", &xen_netdev_ops);
     61
     62    /* configure framebuffer */
     63    if (vga_interface_type == VGA_XENFB) {
     64        xen_config_dev_vfb(0, "vnc");
     65        xen_config_dev_vkbd(0);
     66    }
     67
     68    /* configure disks */
     69    for (i = 0; i < 16; i++) {
     70        dinfo = drive_get(IF_XEN, 0, i);
     71        if (!dinfo)
     72            continue;
     73        xen_config_dev_blk(dinfo);
     74    }
     75
     76    /* configure nics */
     77    for (i = 0; i < nb_nics; i++) {
     78        if (!nd_table[i].model || 0 != strcmp(nd_table[i].model, "xen"))
     79            continue;
     80        xen_config_dev_nic(nd_table + i);
     81    }
     82
     83    xen_bus_init();
     84
     85    /* config cleanup hook */
     86    atexit(xen_config_cleanup);
     87}
     88
     89static void xenpv_machine_init(MachineClass *mc)
     90{
     91    mc->desc = "Xen Para-virtualized PC";
     92    mc->init = xen_init_pv;
     93    mc->max_cpus = 1;
     94    mc->default_machine_opts = "accel=xen";
     95}
     96
     97DEFINE_MACHINE("xenpv", xenpv_machine_init)