Program Status Word
Jump to navigation
Jump to search
The PSW (Program Status Word) describes the current configuration for the context. It control whenever DAT is enabled or not, which allows virtual spaces. It also controls several flags such as the Wait state, Problem state, interrupt masking and other essential execution parameters.
While the 390 documentation lists the PSW in Most-Significant-Bit order, the PSW listed here will be in Least-Significant-Bit order for simplicity.
Bits | Name |
---|---|
0 | Extended addressing mode (z/Arch only) |
1-7 | Reserved |
8 | Unknown (?) |
9 | Enable exception for Exponent Underflow |
10 | Enable exception for Decimal Overflow |
11 | Enable exception for Fixed Point Overflow |
12-13 | Condition code |
14-15 | Address space control |
16 | Problem state (1=Disables unprivileged instruction execution) |
17 | Wait state (Wait for interrupt) |
18 | Machine Check Interrupt mask |
19 | 1=S390, 0=z/Arch |
20-23 | PSW Key for complex memory protection |
24 | External Interrupt mask |
25 | Input/Output Interrupt mask |
26 | Enable DAT |
27-29 | Reserved |
30 | Enable program event recording |
31 | Reserved and must be 0 |
Examples
Structure (S390)
struct s390_psw {
uint32_t flags;
uint32_t address;
} __attribute__((packed, aligned(8)));
Structure (z/Arch)
struct s390x_psw {
uint32_t hi_flags;
uint32_t lo_flags; /* It's all zero except for the MSB (in S/390 order) */
uint32_t hi_address;
uint32_t lo_address;
} __attribute__((packed, aligned(8)));
Portable PSW declaration
/* Helper function to create a PSW adjusted to the current machine */
#if (MACHINE >= M_ZARCH)
# define S390_PSW_DEFAULT_TYPE struct s390x_psw
# define S390_PSW_DECL(name, address, flags)\
S390_PSW_DEFAULT_TYPE name = {\
(flags) | S390_PSW_AM64, S390_PSW_AM31, 0, (uint32_t)(address)\
}
#else
# define S390_PSW_DEFAULT_TYPE struct s390_psw
# define S390_PSW_DECL(name, address, flags)\
S390_PSW_DEFAULT_TYPE name = {\
(flags), (uint32_t)(address) + S390_PSW_DEFAULT_AMBIT\
}
#endif
const S390_PSW_DECL(
wait_io_psw,
0,
S390_PSW_ENABLE_ARCHMODE | S390_PSW_ENABLE_MCI | S390_PSW_WAIT_STATE| S390_PSW_IO_INT | S390_PSW_DAT
);
Service Interrupt handler
.globl s390_supervisor_call_handler_stub
s390_supervisor_call_handler_stub:
stm %r0, %r15, S390_FLCGRSAV
lm %r0, %r15, S390_FLCCRSAV
larl %r15, int_stack_bottom
brasl %r14, s390_supervisor_call_handler
lm %r0, %r15, S390_FLCGRSAV
lpsw S390_FLCSOPSW