1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Guarded storage related definitions 4 * 5 * Copyright 2018 IBM Corp. 6 * 7 * Authors: 8 * Martin Schwidefsky <schwidefsky@de.ibm.com> 9 * Janosch Frank <frankja@linux.ibm.com> 10 */ 11 #include <stdint.h> 12 13 #ifndef _S390X_GS_H_ 14 #define _S390X_GS_H_ 15 16 struct gs_cb { 17 uint64_t reserved; 18 uint64_t gsd; 19 uint64_t gssm; 20 uint64_t gs_epl_a; 21 }; 22 23 struct gs_epl { 24 uint8_t pad1; 25 union { 26 uint8_t gs_eam; 27 struct { 28 uint8_t : 6; 29 uint8_t e : 1; 30 uint8_t b : 1; 31 }; 32 }; 33 union { 34 uint8_t gs_eci; 35 struct { 36 uint8_t tx : 1; 37 uint8_t cx : 1; 38 uint8_t : 5; 39 uint8_t in : 1; 40 }; 41 }; 42 union { 43 uint8_t gs_eai; 44 struct { 45 uint8_t : 1; 46 uint8_t t : 1; 47 uint8_t as : 2; 48 uint8_t ar : 4; 49 }; 50 }; 51 uint32_t pad2; 52 uint64_t gs_eha; 53 uint64_t gs_eia; 54 uint64_t gs_eoa; 55 uint64_t gs_eir; 56 uint64_t gs_era; 57 }; 58 load_gs_cb(struct gs_cb * gs_cb)59static inline void load_gs_cb(struct gs_cb *gs_cb) 60 { 61 asm volatile(".insn rxy,0xe3000000004d,0,%0" : : "Q" (*gs_cb)); 62 } 63 store_gs_cb(struct gs_cb * gs_cb)64static inline void store_gs_cb(struct gs_cb *gs_cb) 65 { 66 asm volatile(".insn rxy,0xe30000000049,0,%0" : : "Q" (*gs_cb)); 67 } 68 69 #endif 70