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_apic.c (2396B)


      1/*
      2 * Xen basic APIC support
      3 *
      4 * Copyright (c) 2012 Citrix
      5 *
      6 * Authors:
      7 *  Wei Liu <wei.liu2@citrix.com>
      8 *
      9 * This work is licensed under the terms of the GNU GPL version 2 or
     10 * later. See the COPYING file in the top-level directory.
     11 */
     12
     13#include "qemu/osdep.h"
     14#include "hw/i386/apic_internal.h"
     15#include "hw/pci/msi.h"
     16#include "hw/xen/xen.h"
     17#include "qemu/module.h"
     18
     19static uint64_t xen_apic_mem_read(void *opaque, hwaddr addr,
     20                                  unsigned size)
     21{
     22    return ~(uint64_t)0;
     23}
     24
     25static void xen_apic_mem_write(void *opaque, hwaddr addr,
     26                               uint64_t data, unsigned size)
     27{
     28    if (size != sizeof(uint32_t)) {
     29        fprintf(stderr, "Xen: APIC write data size = %d, invalid\n", size);
     30        return;
     31    }
     32
     33    xen_hvm_inject_msi(addr, data);
     34}
     35
     36static const MemoryRegionOps xen_apic_io_ops = {
     37    .read = xen_apic_mem_read,
     38    .write = xen_apic_mem_write,
     39    .endianness = DEVICE_NATIVE_ENDIAN,
     40};
     41
     42static void xen_apic_realize(DeviceState *dev, Error **errp)
     43{
     44    APICCommonState *s = APIC_COMMON(dev);
     45
     46    s->vapic_control = 0;
     47    memory_region_init_io(&s->io_memory, OBJECT(s), &xen_apic_io_ops, s,
     48                          "xen-apic-msi", APIC_SPACE_SIZE);
     49    msi_nonbroken = true;
     50}
     51
     52static void xen_apic_set_base(APICCommonState *s, uint64_t val)
     53{
     54}
     55
     56static void xen_apic_set_tpr(APICCommonState *s, uint8_t val)
     57{
     58}
     59
     60static uint8_t xen_apic_get_tpr(APICCommonState *s)
     61{
     62    return 0;
     63}
     64
     65static void xen_apic_vapic_base_update(APICCommonState *s)
     66{
     67}
     68
     69static void xen_apic_external_nmi(APICCommonState *s)
     70{
     71}
     72
     73static void xen_send_msi(MSIMessage *msi)
     74{
     75    xen_hvm_inject_msi(msi->address, msi->data);
     76}
     77
     78static void xen_apic_class_init(ObjectClass *klass, void *data)
     79{
     80    APICCommonClass *k = APIC_COMMON_CLASS(klass);
     81
     82    k->realize = xen_apic_realize;
     83    k->set_base = xen_apic_set_base;
     84    k->set_tpr = xen_apic_set_tpr;
     85    k->get_tpr = xen_apic_get_tpr;
     86    k->vapic_base_update = xen_apic_vapic_base_update;
     87    k->external_nmi = xen_apic_external_nmi;
     88    k->send_msi = xen_send_msi;
     89}
     90
     91static const TypeInfo xen_apic_info = {
     92    .name = "xen-apic",
     93    .parent = TYPE_APIC_COMMON,
     94    .instance_size = sizeof(APICCommonState),
     95    .class_init = xen_apic_class_init,
     96};
     97
     98static void xen_apic_register_types(void)
     99{
    100    type_register_static(&xen_apic_info);
    101}
    102
    103type_init(xen_apic_register_types)