aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/include/uapi/asm/sie.h33
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 */