xref: /kvm-unit-tests/lib/s390x/asm/sigp.h (revision 0af4b381856eb3e82bcfeac5a2fef73828537a7b)
1*0af4b381SJanosch Frank /*
2*0af4b381SJanosch Frank  * SIGP related definitions.
3*0af4b381SJanosch Frank  *
4*0af4b381SJanosch Frank  * Copied from the Linux kernel file arch/s390/include/asm/sigp.h
5*0af4b381SJanosch Frank  *
6*0af4b381SJanosch Frank  * This work is licensed under the terms of the GNU GPL, version
7*0af4b381SJanosch Frank  * 2.
8*0af4b381SJanosch Frank  */
9*0af4b381SJanosch Frank 
10*0af4b381SJanosch Frank #ifndef ASM_S390X_SIGP_H
11*0af4b381SJanosch Frank #define ASM_S390X_SIGP_H
12*0af4b381SJanosch Frank 
13*0af4b381SJanosch Frank /* SIGP order codes */
14*0af4b381SJanosch Frank #define SIGP_SENSE			1
15*0af4b381SJanosch Frank #define SIGP_EXTERNAL_CALL		2
16*0af4b381SJanosch Frank #define SIGP_EMERGENCY_SIGNAL		3
17*0af4b381SJanosch Frank #define SIGP_START			4
18*0af4b381SJanosch Frank #define SIGP_STOP			5
19*0af4b381SJanosch Frank #define SIGP_RESTART			6
20*0af4b381SJanosch Frank #define SIGP_STOP_AND_STORE_STATUS	9
21*0af4b381SJanosch Frank #define SIGP_INITIAL_CPU_RESET		11
22*0af4b381SJanosch Frank #define SIGP_CPU_RESET			12
23*0af4b381SJanosch Frank #define SIGP_SET_PREFIX			13
24*0af4b381SJanosch Frank #define SIGP_STORE_STATUS_AT_ADDRESS	14
25*0af4b381SJanosch Frank #define SIGP_SET_ARCHITECTURE		18
26*0af4b381SJanosch Frank #define SIGP_COND_EMERGENCY_SIGNAL	19
27*0af4b381SJanosch Frank #define SIGP_SENSE_RUNNING		21
28*0af4b381SJanosch Frank #define SIGP_SET_MULTI_THREADING	22
29*0af4b381SJanosch Frank #define SIGP_STORE_ADDITIONAL_STATUS	23
30*0af4b381SJanosch Frank 
31*0af4b381SJanosch Frank /* SIGP condition codes */
32*0af4b381SJanosch Frank #define SIGP_CC_ORDER_CODE_ACCEPTED 0
33*0af4b381SJanosch Frank #define SIGP_CC_STATUS_STORED	    1
34*0af4b381SJanosch Frank #define SIGP_CC_BUSY		    2
35*0af4b381SJanosch Frank #define SIGP_CC_NOT_OPERATIONAL	    3
36*0af4b381SJanosch Frank 
37*0af4b381SJanosch Frank /* SIGP cpu status bits */
38*0af4b381SJanosch Frank 
39*0af4b381SJanosch Frank #define SIGP_STATUS_INVALID_ORDER	0x00000002UL
40*0af4b381SJanosch Frank #define SIGP_STATUS_CHECK_STOP		0x00000010UL
41*0af4b381SJanosch Frank #define SIGP_STATUS_STOPPED		0x00000040UL
42*0af4b381SJanosch Frank #define SIGP_STATUS_EXT_CALL_PENDING	0x00000080UL
43*0af4b381SJanosch Frank #define SIGP_STATUS_INVALID_PARAMETER	0x00000100UL
44*0af4b381SJanosch Frank #define SIGP_STATUS_INCORRECT_STATE	0x00000200UL
45*0af4b381SJanosch Frank #define SIGP_STATUS_NOT_RUNNING		0x00000400UL
46*0af4b381SJanosch Frank 
47*0af4b381SJanosch Frank #ifndef __ASSEMBLER__
48*0af4b381SJanosch Frank 
49*0af4b381SJanosch Frank static inline void sigp_stop(void)
50*0af4b381SJanosch Frank {
51*0af4b381SJanosch Frank 	register unsigned long status asm ("1") = 0;
52*0af4b381SJanosch Frank 	register unsigned long cpu asm ("2") = 0;
53*0af4b381SJanosch Frank 
54*0af4b381SJanosch Frank 	asm volatile(
55*0af4b381SJanosch Frank 		"	sigp %0,%1,0(%2)\n"
56*0af4b381SJanosch Frank 		: "+d" (status)  : "d" (cpu), "d" (SIGP_STOP) : "cc");
57*0af4b381SJanosch Frank }
58*0af4b381SJanosch Frank 
59*0af4b381SJanosch Frank #endif /* __ASSEMBLER__ */
60*0af4b381SJanosch Frank #endif /* ASM_S390X_SIGP_H */
61