mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
1.8 KiB
70 lines
1.8 KiB
/* SPDX-License-Identifier: GPL-2.0 */ |
|
#ifndef __S390_ASM_SIGP_H |
|
#define __S390_ASM_SIGP_H |
|
|
|
/* SIGP order codes */ |
|
#define SIGP_SENSE 1 |
|
#define SIGP_EXTERNAL_CALL 2 |
|
#define SIGP_EMERGENCY_SIGNAL 3 |
|
#define SIGP_START 4 |
|
#define SIGP_STOP 5 |
|
#define SIGP_RESTART 6 |
|
#define SIGP_STOP_AND_STORE_STATUS 9 |
|
#define SIGP_INITIAL_CPU_RESET 11 |
|
#define SIGP_CPU_RESET 12 |
|
#define SIGP_SET_PREFIX 13 |
|
#define SIGP_STORE_STATUS_AT_ADDRESS 14 |
|
#define SIGP_SET_ARCHITECTURE 18 |
|
#define SIGP_COND_EMERGENCY_SIGNAL 19 |
|
#define SIGP_SENSE_RUNNING 21 |
|
#define SIGP_SET_MULTI_THREADING 22 |
|
#define SIGP_STORE_ADDITIONAL_STATUS 23 |
|
|
|
/* SIGP condition codes */ |
|
#define SIGP_CC_ORDER_CODE_ACCEPTED 0 |
|
#define SIGP_CC_STATUS_STORED 1 |
|
#define SIGP_CC_BUSY 2 |
|
#define SIGP_CC_NOT_OPERATIONAL 3 |
|
|
|
/* SIGP cpu status bits */ |
|
|
|
#define SIGP_STATUS_INVALID_ORDER 0x00000002UL |
|
#define SIGP_STATUS_CHECK_STOP 0x00000010UL |
|
#define SIGP_STATUS_STOPPED 0x00000040UL |
|
#define SIGP_STATUS_EXT_CALL_PENDING 0x00000080UL |
|
#define SIGP_STATUS_INVALID_PARAMETER 0x00000100UL |
|
#define SIGP_STATUS_INCORRECT_STATE 0x00000200UL |
|
#define SIGP_STATUS_NOT_RUNNING 0x00000400UL |
|
|
|
#ifndef __ASSEMBLY__ |
|
|
|
static inline int ____pcpu_sigp(u16 addr, u8 order, unsigned long parm, |
|
u32 *status) |
|
{ |
|
register unsigned long reg1 asm ("1") = parm; |
|
int cc; |
|
|
|
asm volatile( |
|
" sigp %1,%2,0(%3)\n" |
|
" ipm %0\n" |
|
" srl %0,28\n" |
|
: "=d" (cc), "+d" (reg1) : "d" (addr), "a" (order) : "cc"); |
|
*status = reg1; |
|
return cc; |
|
} |
|
|
|
static inline int __pcpu_sigp(u16 addr, u8 order, unsigned long parm, |
|
u32 *status) |
|
{ |
|
u32 _status; |
|
int cc; |
|
|
|
cc = ____pcpu_sigp(addr, order, parm, &_status); |
|
if (status && cc == SIGP_CC_STATUS_STORED) |
|
*status = _status; |
|
return cc; |
|
} |
|
|
|
#endif /* __ASSEMBLY__ */ |
|
|
|
#endif /* __S390_ASM_SIGP_H */
|
|
|