Statistics
| Branch: | Revision:

root / hw / xen / xen_apic.c @ ff6986ce

History | View | Annotate | Download (2.2 kB)

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
#include "hw/i386/apic_internal.h"
13
#include "hw/pci/msi.h"
14
#include "hw/xen/xen.h"
15

    
16
static uint64_t xen_apic_mem_read(void *opaque, hwaddr addr,
17
                                  unsigned size)
18
{
19
    return ~(uint64_t)0;
20
}
21

    
22
static void xen_apic_mem_write(void *opaque, hwaddr addr,
23
                               uint64_t data, unsigned size)
24
{
25
    if (size != sizeof(uint32_t)) {
26
        fprintf(stderr, "Xen: APIC write data size = %d, invalid\n", size);
27
        return;
28
    }
29

    
30
    xen_hvm_inject_msi(addr, data);
31
}
32

    
33
static const MemoryRegionOps xen_apic_io_ops = {
34
    .read = xen_apic_mem_read,
35
    .write = xen_apic_mem_write,
36
    .endianness = DEVICE_NATIVE_ENDIAN,
37
};
38

    
39
static void xen_apic_realize(DeviceState *dev, Error **errp)
40
{
41
    APICCommonState *s = APIC_COMMON(dev);
42

    
43
    memory_region_init_io(&s->io_memory, OBJECT(s), &xen_apic_io_ops, s,
44
                          "xen-apic-msi", APIC_SPACE_SIZE);
45

    
46
#if defined(CONFIG_XEN_CTRL_INTERFACE_VERSION) \
47
    && CONFIG_XEN_CTRL_INTERFACE_VERSION >= 420
48
    msi_supported = true;
49
#endif
50
}
51

    
52
static void xen_apic_set_base(APICCommonState *s, uint64_t val)
53
{
54
}
55

    
56
static void xen_apic_set_tpr(APICCommonState *s, uint8_t val)
57
{
58
}
59

    
60
static uint8_t xen_apic_get_tpr(APICCommonState *s)
61
{
62
    return 0;
63
}
64

    
65
static void xen_apic_vapic_base_update(APICCommonState *s)
66
{
67
}
68

    
69
static void xen_apic_external_nmi(APICCommonState *s)
70
{
71
}
72

    
73
static void xen_apic_class_init(ObjectClass *klass, void *data)
74
{
75
    APICCommonClass *k = APIC_COMMON_CLASS(klass);
76

    
77
    k->realize = xen_apic_realize;
78
    k->set_base = xen_apic_set_base;
79
    k->set_tpr = xen_apic_set_tpr;
80
    k->get_tpr = xen_apic_get_tpr;
81
    k->vapic_base_update = xen_apic_vapic_base_update;
82
    k->external_nmi = xen_apic_external_nmi;
83
}
84

    
85
static const TypeInfo xen_apic_info = {
86
    .name = "xen-apic",
87
    .parent = TYPE_APIC_COMMON,
88
    .instance_size = sizeof(APICCommonState),
89
    .class_init = xen_apic_class_init,
90
};
91

    
92
static void xen_apic_register_types(void)
93
{
94
    type_register_static(&xen_apic_info);
95
}
96

    
97
type_init(xen_apic_register_types)