xref: /kvm-unit-tests/lib/s390x/sie-icpt.h (revision 1f08a91a41402b0e032ecce8ed1b5952cbfca0ea)
1*dc142414SNina Schoetterl-Glausch /* SPDX-License-Identifier: GPL-2.0-only */
2*dc142414SNina Schoetterl-Glausch /*
3*dc142414SNina Schoetterl-Glausch  * Functionality for SIE interception handling.
4*dc142414SNina Schoetterl-Glausch  *
5*dc142414SNina Schoetterl-Glausch  * Copyright IBM Corp. 2024
6*dc142414SNina Schoetterl-Glausch  */
7*dc142414SNina Schoetterl-Glausch 
8*dc142414SNina Schoetterl-Glausch #ifndef _S390X_SIE_ICPT_H_
9*dc142414SNina Schoetterl-Glausch #define _S390X_SIE_ICPT_H_
10*dc142414SNina Schoetterl-Glausch 
11*dc142414SNina Schoetterl-Glausch #include <libcflat.h>
12*dc142414SNina Schoetterl-Glausch #include <sie.h>
13*dc142414SNina Schoetterl-Glausch 
14*dc142414SNina Schoetterl-Glausch struct diag_itext {
15*dc142414SNina Schoetterl-Glausch 	uint64_t opcode   :  8;
16*dc142414SNina Schoetterl-Glausch 	uint64_t r_1      :  4;
17*dc142414SNina Schoetterl-Glausch 	uint64_t r_2      :  4;
18*dc142414SNina Schoetterl-Glausch 	uint64_t r_base   :  4;
19*dc142414SNina Schoetterl-Glausch 	uint64_t displace : 12;
20*dc142414SNina Schoetterl-Glausch 	uint64_t zero     : 16;
21*dc142414SNina Schoetterl-Glausch 	uint64_t          : 16;
22*dc142414SNina Schoetterl-Glausch };
23*dc142414SNina Schoetterl-Glausch 
24*dc142414SNina Schoetterl-Glausch struct diag_itext sblk_ip_as_diag(struct kvm_s390_sie_block *sblk);
25*dc142414SNina Schoetterl-Glausch 
26*dc142414SNina Schoetterl-Glausch /**
27*dc142414SNina Schoetterl-Glausch  * sie_is_diag_icpt() - Check if intercept is due to diagnose instruction
28*dc142414SNina Schoetterl-Glausch  * @vm: the guest
29*dc142414SNina Schoetterl-Glausch  * @diag: the expected diagnose code
30*dc142414SNina Schoetterl-Glausch  *
31*dc142414SNina Schoetterl-Glausch  * Check that the intercept is due to diagnose @diag and valid.
32*dc142414SNina Schoetterl-Glausch  * For protected virtualization, check that the intercept data meets additional
33*dc142414SNina Schoetterl-Glausch  * constraints.
34*dc142414SNina Schoetterl-Glausch  *
35*dc142414SNina Schoetterl-Glausch  * Returns: true if intercept is due to a valid and has matching diagnose code
36*dc142414SNina Schoetterl-Glausch  */
37*dc142414SNina Schoetterl-Glausch bool sie_is_diag_icpt(struct vm *vm, unsigned int diag);
38*dc142414SNina Schoetterl-Glausch 
39*dc142414SNina Schoetterl-Glausch #endif /* _S390X_SIE_ICPT_H_ */
40