1 /* Copyright (c) 2018 Citrix Systems Inc. */
2 
3 #ifndef X86_HVM_VIRIDIAN_PRIVATE_H
4 #define X86_HVM_VIRIDIAN_PRIVATE_H
5 
6 #include <asm/hvm/save.h>
7 #include <asm/hvm/viridian.h>
8 #include <public/hvm/params.h>
9 
10 int viridian_synic_wrmsr(struct vcpu *v, uint32_t idx, uint64_t val);
11 int viridian_synic_rdmsr(const struct vcpu *v, uint32_t idx, uint64_t *val);
12 
13 bool viridian_synic_deliver_timer_msg(struct vcpu *v, unsigned int sintx,
14                                       unsigned int index,
15                                       uint64_t expiration,
16                                       uint64_t delivery);
17 
18 int viridian_synic_vcpu_init(const struct vcpu *v);
19 int viridian_synic_domain_init(const struct domain *d);
20 
21 void viridian_synic_vcpu_deinit(const struct vcpu *v);
22 void viridian_synic_domain_deinit(const struct domain *d);
23 
24 void viridian_synic_save_vcpu_ctxt(const struct vcpu *v,
25                                    struct hvm_viridian_vcpu_context *ctxt);
26 void viridian_synic_load_vcpu_ctxt(
27     struct vcpu *v, const struct hvm_viridian_vcpu_context *ctxt);
28 
29 void viridian_synic_save_domain_ctxt(
30     const struct domain *d, struct hvm_viridian_domain_context *ctxt);
31 void viridian_synic_load_domain_ctxt(
32     struct domain *d, const struct hvm_viridian_domain_context *ctxt);
33 
34 int viridian_time_wrmsr(struct vcpu *v, uint32_t idx, uint64_t val);
35 int viridian_time_rdmsr(const struct vcpu *v, uint32_t idx, uint64_t *val);
36 
37 void viridian_time_poll_timers(struct vcpu *v);
38 
39 int viridian_time_vcpu_init(struct vcpu *v);
40 int viridian_time_domain_init(const struct domain *d);
41 
42 void viridian_time_vcpu_deinit(const struct vcpu *v);
43 void viridian_time_domain_deinit(const struct domain *d);
44 
45 void viridian_time_save_vcpu_ctxt(
46     const struct vcpu *v, struct hvm_viridian_vcpu_context *ctxt);
47 void viridian_time_load_vcpu_ctxt(
48     struct vcpu *v, const struct hvm_viridian_vcpu_context *ctxt);
49 
50 void viridian_time_save_domain_ctxt(
51     const struct domain *d, struct hvm_viridian_domain_context *ctxt);
52 void viridian_time_load_domain_ctxt(
53     struct domain *d, const struct hvm_viridian_domain_context *ctxt);
54 
55 void viridian_dump_guest_page(const struct vcpu *v, const char *name,
56                               const struct viridian_page *vp);
57 void viridian_map_guest_page(struct domain *d, struct viridian_page *vp);
58 void viridian_unmap_guest_page(struct viridian_page *vp);
59 
60 #endif /* X86_HVM_VIRIDIAN_PRIVATE_H */
61 
62 /*
63  * Local variables:
64  * mode: C
65  * c-file-style: "BSD"
66  * c-basic-offset: 4
67  * tab-width: 4
68  * indent-tabs-mode: nil
69  * End:
70  */
71