10af4b381SJanosch Frank /* 20af4b381SJanosch Frank * SIGP related definitions. 30af4b381SJanosch Frank * 40af4b381SJanosch Frank * Copied from the Linux kernel file arch/s390/include/asm/sigp.h 50af4b381SJanosch Frank * 60af4b381SJanosch Frank * This work is licensed under the terms of the GNU GPL, version 70af4b381SJanosch Frank * 2. 80af4b381SJanosch Frank */ 90af4b381SJanosch Frank 100af4b381SJanosch Frank #ifndef ASM_S390X_SIGP_H 110af4b381SJanosch Frank #define ASM_S390X_SIGP_H 120af4b381SJanosch Frank 130af4b381SJanosch Frank /* SIGP order codes */ 140af4b381SJanosch Frank #define SIGP_SENSE 1 150af4b381SJanosch Frank #define SIGP_EXTERNAL_CALL 2 160af4b381SJanosch Frank #define SIGP_EMERGENCY_SIGNAL 3 170af4b381SJanosch Frank #define SIGP_START 4 180af4b381SJanosch Frank #define SIGP_STOP 5 190af4b381SJanosch Frank #define SIGP_RESTART 6 200af4b381SJanosch Frank #define SIGP_STOP_AND_STORE_STATUS 9 210af4b381SJanosch Frank #define SIGP_INITIAL_CPU_RESET 11 220af4b381SJanosch Frank #define SIGP_CPU_RESET 12 230af4b381SJanosch Frank #define SIGP_SET_PREFIX 13 240af4b381SJanosch Frank #define SIGP_STORE_STATUS_AT_ADDRESS 14 250af4b381SJanosch Frank #define SIGP_SET_ARCHITECTURE 18 260af4b381SJanosch Frank #define SIGP_COND_EMERGENCY_SIGNAL 19 270af4b381SJanosch Frank #define SIGP_SENSE_RUNNING 21 280af4b381SJanosch Frank #define SIGP_SET_MULTI_THREADING 22 290af4b381SJanosch Frank #define SIGP_STORE_ADDITIONAL_STATUS 23 300af4b381SJanosch Frank 310af4b381SJanosch Frank /* SIGP condition codes */ 320af4b381SJanosch Frank #define SIGP_CC_ORDER_CODE_ACCEPTED 0 330af4b381SJanosch Frank #define SIGP_CC_STATUS_STORED 1 340af4b381SJanosch Frank #define SIGP_CC_BUSY 2 350af4b381SJanosch Frank #define SIGP_CC_NOT_OPERATIONAL 3 360af4b381SJanosch Frank 370af4b381SJanosch Frank /* SIGP cpu status bits */ 380af4b381SJanosch Frank 390af4b381SJanosch Frank #define SIGP_STATUS_INVALID_ORDER 0x00000002UL 400af4b381SJanosch Frank #define SIGP_STATUS_CHECK_STOP 0x00000010UL 410af4b381SJanosch Frank #define SIGP_STATUS_STOPPED 0x00000040UL 420af4b381SJanosch Frank #define SIGP_STATUS_EXT_CALL_PENDING 0x00000080UL 430af4b381SJanosch Frank #define SIGP_STATUS_INVALID_PARAMETER 0x00000100UL 440af4b381SJanosch Frank #define SIGP_STATUS_INCORRECT_STATE 0x00000200UL 450af4b381SJanosch Frank #define SIGP_STATUS_NOT_RUNNING 0x00000400UL 460af4b381SJanosch Frank 470af4b381SJanosch Frank #ifndef __ASSEMBLER__ 480af4b381SJanosch Frank 49*f77c0515SJanosch Frank 50*f77c0515SJanosch Frank static inline int sigp(uint16_t addr, uint8_t order, unsigned long parm, 51*f77c0515SJanosch Frank uint32_t *status) 520af4b381SJanosch Frank { 53*f77c0515SJanosch Frank register unsigned long reg1 asm ("1") = parm; 54*f77c0515SJanosch Frank int cc; 550af4b381SJanosch Frank 560af4b381SJanosch Frank asm volatile( 57*f77c0515SJanosch Frank " sigp %1,%2,0(%3)\n" 58*f77c0515SJanosch Frank " ipm %0\n" 59*f77c0515SJanosch Frank " srl %0,28\n" 60*f77c0515SJanosch Frank : "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc"); 61*f77c0515SJanosch Frank if (status) 62*f77c0515SJanosch Frank *status = reg1; 63*f77c0515SJanosch Frank return cc; 64*f77c0515SJanosch Frank } 65*f77c0515SJanosch Frank 66*f77c0515SJanosch Frank static inline int sigp_retry(uint16_t addr, uint8_t order, unsigned long parm, 67*f77c0515SJanosch Frank uint32_t *status) 68*f77c0515SJanosch Frank { 69*f77c0515SJanosch Frank int cc; 70*f77c0515SJanosch Frank 71*f77c0515SJanosch Frank do { 72*f77c0515SJanosch Frank cc = sigp(addr, order, parm, status); 73*f77c0515SJanosch Frank } while (cc == 2); 74*f77c0515SJanosch Frank return cc; 750af4b381SJanosch Frank } 760af4b381SJanosch Frank 770af4b381SJanosch Frank #endif /* __ASSEMBLER__ */ 780af4b381SJanosch Frank #endif /* ASM_S390X_SIGP_H */ 79