Statistics
| Branch: | Revision:

root / hw / xen_apic.c @ a1bc20df

History | View | Annotate | Download (2.1 kB)

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