Heiko Carstens | 9b74753 | 2012-06-26 16:06:37 +0200 | [diff] [blame] | 1 | #ifndef __S390_ASM_SIGP_H |
| 2 | #define __S390_ASM_SIGP_H |
| 3 | |
| 4 | /* SIGP order codes */ |
| 5 | #define SIGP_SENSE 1 |
| 6 | #define SIGP_EXTERNAL_CALL 2 |
| 7 | #define SIGP_EMERGENCY_SIGNAL 3 |
Thomas Huth | 58bc33b | 2013-12-03 12:54:55 +0100 | [diff] [blame] | 8 | #define SIGP_START 4 |
Heiko Carstens | 9b74753 | 2012-06-26 16:06:37 +0200 | [diff] [blame] | 9 | #define SIGP_STOP 5 |
| 10 | #define SIGP_RESTART 6 |
| 11 | #define SIGP_STOP_AND_STORE_STATUS 9 |
| 12 | #define SIGP_INITIAL_CPU_RESET 11 |
David Hildenbrand | b898383 | 2014-05-23 12:22:56 +0200 | [diff] [blame] | 13 | #define SIGP_CPU_RESET 12 |
Heiko Carstens | 9b74753 | 2012-06-26 16:06:37 +0200 | [diff] [blame] | 14 | #define SIGP_SET_PREFIX 13 |
| 15 | #define SIGP_STORE_STATUS_AT_ADDRESS 14 |
| 16 | #define SIGP_SET_ARCHITECTURE 18 |
Thomas Huth | b13d358 | 2013-11-21 16:01:48 +0100 | [diff] [blame] | 17 | #define SIGP_COND_EMERGENCY_SIGNAL 19 |
Heiko Carstens | 9b74753 | 2012-06-26 16:06:37 +0200 | [diff] [blame] | 18 | #define SIGP_SENSE_RUNNING 21 |
Martin Schwidefsky | 10ad34b | 2015-01-14 17:52:10 +0100 | [diff] [blame] | 19 | #define SIGP_SET_MULTI_THREADING 22 |
Michael Holzheu | a62bc07 | 2014-10-06 17:57:43 +0200 | [diff] [blame] | 20 | #define SIGP_STORE_ADDITIONAL_STATUS 23 |
Heiko Carstens | 9b74753 | 2012-06-26 16:06:37 +0200 | [diff] [blame] | 21 | |
| 22 | /* SIGP condition codes */ |
| 23 | #define SIGP_CC_ORDER_CODE_ACCEPTED 0 |
| 24 | #define SIGP_CC_STATUS_STORED 1 |
| 25 | #define SIGP_CC_BUSY 2 |
| 26 | #define SIGP_CC_NOT_OPERATIONAL 3 |
| 27 | |
| 28 | /* SIGP cpu status bits */ |
| 29 | |
| 30 | #define SIGP_STATUS_CHECK_STOP 0x00000010UL |
| 31 | #define SIGP_STATUS_STOPPED 0x00000040UL |
Cornelia Huck | 21b26c0 | 2012-06-26 16:06:41 +0200 | [diff] [blame] | 32 | #define SIGP_STATUS_EXT_CALL_PENDING 0x00000080UL |
Heiko Carstens | 9b74753 | 2012-06-26 16:06:37 +0200 | [diff] [blame] | 33 | #define SIGP_STATUS_INVALID_PARAMETER 0x00000100UL |
| 34 | #define SIGP_STATUS_INCORRECT_STATE 0x00000200UL |
| 35 | #define SIGP_STATUS_NOT_RUNNING 0x00000400UL |
| 36 | |
Heiko Carstens | e7c46c6 | 2014-04-04 11:23:03 +0200 | [diff] [blame] | 37 | #ifndef __ASSEMBLY__ |
| 38 | |
Michael Holzheu | a62bc07 | 2014-10-06 17:57:43 +0200 | [diff] [blame] | 39 | static inline int __pcpu_sigp(u16 addr, u8 order, unsigned long parm, |
| 40 | u32 *status) |
Heiko Carstens | e7c46c6 | 2014-04-04 11:23:03 +0200 | [diff] [blame] | 41 | { |
Michael Holzheu | a62bc07 | 2014-10-06 17:57:43 +0200 | [diff] [blame] | 42 | register unsigned long reg1 asm ("1") = parm; |
Heiko Carstens | e7c46c6 | 2014-04-04 11:23:03 +0200 | [diff] [blame] | 43 | int cc; |
| 44 | |
| 45 | asm volatile( |
| 46 | " sigp %1,%2,0(%3)\n" |
| 47 | " ipm %0\n" |
| 48 | " srl %0,28\n" |
| 49 | : "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc"); |
| 50 | if (status && cc == 1) |
| 51 | *status = reg1; |
| 52 | return cc; |
| 53 | } |
| 54 | |
| 55 | #endif /* __ASSEMBLY__ */ |
| 56 | |
Heiko Carstens | 9b74753 | 2012-06-26 16:06:37 +0200 | [diff] [blame] | 57 | #endif /* __S390_ASM_SIGP_H */ |