xref: /qemu/include/hw/hyperv/hyperv.h (revision 606c34bfd57a0ecda67b395bea022bb307a5384e)
1701189e3SRoman Kagan /*
2701189e3SRoman Kagan  * Hyper-V guest/hypervisor interaction
3701189e3SRoman Kagan  *
4701189e3SRoman Kagan  * Copyright (c) 2015-2018 Virtuozzo International GmbH.
5701189e3SRoman Kagan  *
6701189e3SRoman Kagan  * This work is licensed under the terms of the GNU GPL, version 2 or later.
7701189e3SRoman Kagan  * See the COPYING file in the top-level directory.
8701189e3SRoman Kagan  */
9701189e3SRoman Kagan 
10701189e3SRoman Kagan #ifndef HW_HYPERV_HYPERV_H
11701189e3SRoman Kagan #define HW_HYPERV_HYPERV_H
12701189e3SRoman Kagan 
13701189e3SRoman Kagan #include "cpu-qom.h"
14701189e3SRoman Kagan 
15701189e3SRoman Kagan typedef struct HvSintRoute HvSintRoute;
16701189e3SRoman Kagan typedef void (*HvSintAckClb)(void *data);
17701189e3SRoman Kagan 
18701189e3SRoman Kagan HvSintRoute *hyperv_sint_route_new(uint32_t vp_index, uint32_t sint,
19701189e3SRoman Kagan                                    HvSintAckClb sint_ack_clb,
20701189e3SRoman Kagan                                    void *sint_ack_clb_data);
21701189e3SRoman Kagan void hyperv_sint_route_ref(HvSintRoute *sint_route);
22701189e3SRoman Kagan void hyperv_sint_route_unref(HvSintRoute *sint_route);
23701189e3SRoman Kagan 
24701189e3SRoman Kagan int hyperv_sint_route_set_sint(HvSintRoute *sint_route);
25701189e3SRoman Kagan 
26701189e3SRoman Kagan static inline uint32_t hyperv_vp_index(CPUState *cs)
27701189e3SRoman Kagan {
28701189e3SRoman Kagan     return cs->cpu_index;
29701189e3SRoman Kagan }
30701189e3SRoman Kagan 
31*606c34bfSRoman Kagan void hyperv_synic_add(CPUState *cs);
32*606c34bfSRoman Kagan void hyperv_synic_reset(CPUState *cs);
33*606c34bfSRoman Kagan void hyperv_synic_update(CPUState *cs, bool enable,
34*606c34bfSRoman Kagan                          hwaddr msg_page_addr, hwaddr event_page_addr);
35*606c34bfSRoman Kagan 
36701189e3SRoman Kagan #endif
37