1 #include <xen/sched.h>
2
3 #include <asm/domain.h>
4 #include <asm/processor.h>
5
6 #include <public/xen.h>
7
8 /* C(hyp,user), hyp is Xen internal name, user is user API name. */
9
10 #define ALLREGS \
11 C(r0,r0_usr); C(r1,r1_usr); C(r2,r2_usr); C(r3,r3_usr); \
12 C(r4,r4_usr); C(r5,r5_usr); C(r6,r6_usr); C(r7,r7_usr); \
13 C(r8,r8_usr); C(r9,r9_usr); C(r10,r10_usr); C(r11,r11_usr); \
14 C(r12,r12_usr); \
15 C(sp_usr,sp_usr); \
16 C(lr,lr_usr); \
17 C(spsr_irq,spsr_irq); C(lr_irq,lr_irq); C(sp_irq,sp_irq); \
18 C(spsr_svc,spsr_svc); C(lr_svc,lr_svc); C(sp_svc,sp_svc); \
19 C(spsr_abt,spsr_abt); C(lr_abt,lr_abt); C(sp_abt,sp_abt); \
20 C(spsr_und,spsr_und); C(lr_und,lr_und); C(sp_und,sp_und); \
21 C(spsr_fiq,spsr_fiq); C(sp_fiq,sp_fiq); C(sp_fiq,sp_fiq); \
22 C(r8_fiq,r8_fiq); C(r9_fiq,r9_fiq); \
23 C(r10_fiq,r10_fiq); C(r11_fiq,r11_fiq); C(r12_fiq,r12_fiq); \
24 C(pc,pc32); \
25 C(cpsr,cpsr)
26
vcpu_regs_hyp_to_user(const struct vcpu * vcpu,struct vcpu_guest_core_regs * regs)27 void vcpu_regs_hyp_to_user(const struct vcpu *vcpu,
28 struct vcpu_guest_core_regs *regs)
29 {
30 #define C(hyp,user) regs->user = vcpu->arch.cpu_info->guest_cpu_user_regs.hyp
31 ALLREGS;
32 #undef C
33 }
34
vcpu_regs_user_to_hyp(struct vcpu * vcpu,const struct vcpu_guest_core_regs * regs)35 void vcpu_regs_user_to_hyp(struct vcpu *vcpu,
36 const struct vcpu_guest_core_regs *regs)
37 {
38 #define C(hyp,user) vcpu->arch.cpu_info->guest_cpu_user_regs.hyp = regs->user
39 ALLREGS;
40 #undef C
41 }
42
43 /*
44 * Local variables:
45 * mode: C
46 * c-file-style: "BSD"
47 * c-basic-offset: 4
48 * indent-tabs-mode: nil
49 * End:
50 */
51