/* SPDX-License-Identifier: GPL-2.0 */ #ifndef __ASM_S390_SAE_H #define __ASM_S390_SAE_H #include #include #ifndef __ASSEMBLER__ /* defined in arch/s390/kernel/entry.S */ asmlinkage void sae(phys_addr_t sae_block_phys); #include #include /** * stiasrm() - STore and Invalidate Arm System Register Multiple * @save_area: Pointer to SAE save area * * Store the guest system registers to the save area. * The values in the guest are no longer valid. */ static __always_inline void stiasrm(struct kvm_sae_save_area *save_area) { asm_inline volatile( " .insn rre,0xb9a70000,%[r1],0\n" : "+m" (*save_area) : [r1] "a" (save_area) ); } /** * lasrm() - Load Arm System Register Multiple * * @save_area: Pointer to SAE save area * * Load the system registers from save_area into the guest. */ static __always_inline void lasrm(struct kvm_sae_save_area *save_area) { asm_inline volatile( " .insn rre,0xb9a60000,%[r1],0\n" : : "m" (*save_area), [r1] "a" (save_area) ); } #endif /* !__ASSEMBLER__ */ #endif /* __ASM_S390_SAE_H */