diff options
Diffstat (limited to 'arch/s390')
-rw-r--r-- | arch/s390/include/uapi/asm/sie.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/s390/include/uapi/asm/sie.h b/arch/s390/include/uapi/asm/sie.h index ec793e188681..3d97f610198d 100644 --- a/arch/s390/include/uapi/asm/sie.h +++ b/arch/s390/include/uapi/asm/sie.h | |||
@@ -209,4 +209,37 @@ | |||
209 | { 0x40, "I/O instruction" }, \ | 209 | { 0x40, "I/O instruction" }, \ |
210 | { 0x48, "Timing subset" } | 210 | { 0x48, "Timing subset" } |
211 | 211 | ||
212 | /* | ||
213 | * This is the simple interceptable instructions decoder. | ||
214 | * | ||
215 | * It will be used as userspace interface and it can be used in places | ||
216 | * that does not allow to use general decoder functions, | ||
217 | * such as trace events declarations. | ||
218 | * | ||
219 | * Some userspace tools may want to parse this code | ||
220 | * and would be confused by switch(), if() and other statements, | ||
221 | * but they can understand conditional operator. | ||
222 | */ | ||
223 | #define INSN_DECODE_IPA0(ipa0, insn, rshift, mask) \ | ||
224 | (insn >> 56) == (ipa0) ? \ | ||
225 | ((ipa0 << 8) | ((insn >> rshift) & mask)) : | ||
226 | |||
227 | #define INSN_DECODE(insn) (insn >> 56) | ||
228 | |||
229 | /* | ||
230 | * The macro icpt_insn_decoder() takes an intercepted instruction | ||
231 | * and returns a key, which can be used to find a mnemonic name | ||
232 | * of the instruction in the icpt_insn_codes table. | ||
233 | */ | ||
234 | #define icpt_insn_decoder(insn) \ | ||
235 | INSN_DECODE_IPA0(0x01, insn, 48, 0xff) \ | ||
236 | INSN_DECODE_IPA0(0xaa, insn, 48, 0x0f) \ | ||
237 | INSN_DECODE_IPA0(0xb2, insn, 48, 0xff) \ | ||
238 | INSN_DECODE_IPA0(0xb9, insn, 48, 0xff) \ | ||
239 | INSN_DECODE_IPA0(0xe3, insn, 48, 0xff) \ | ||
240 | INSN_DECODE_IPA0(0xe5, insn, 48, 0xff) \ | ||
241 | INSN_DECODE_IPA0(0xeb, insn, 16, 0xff) \ | ||
242 | INSN_DECODE_IPA0(0xc8, insn, 48, 0x0f) \ | ||
243 | INSN_DECODE(insn) | ||
244 | |||
212 | #endif /* _UAPI_ASM_S390_SIE_H */ | 245 | #endif /* _UAPI_ASM_S390_SIE_H */ |