root/arch/s390/include/uapi/asm/guarded_storage.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. load_gs_cb
  2. store_gs_cb
  3. save_gs_cb
  4. restore_gs_cb

   1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2 #ifndef _GUARDED_STORAGE_H
   3 #define _GUARDED_STORAGE_H
   4 
   5 #include <linux/types.h>
   6 
   7 struct gs_cb {
   8         __u64 reserved;
   9         __u64 gsd;
  10         __u64 gssm;
  11         __u64 gs_epl_a;
  12 };
  13 
  14 struct gs_epl {
  15         __u8 pad1;
  16         union {
  17                 __u8 gs_eam;
  18                 struct {
  19                         __u8    : 6;
  20                         __u8 e  : 1;
  21                         __u8 b  : 1;
  22                 };
  23         };
  24         union {
  25                 __u8 gs_eci;
  26                 struct {
  27                         __u8 tx : 1;
  28                         __u8 cx : 1;
  29                         __u8    : 5;
  30                         __u8 in : 1;
  31                 };
  32         };
  33         union {
  34                 __u8 gs_eai;
  35                 struct {
  36                         __u8    : 1;
  37                         __u8 t  : 1;
  38                         __u8 as : 2;
  39                         __u8 ar : 4;
  40                 };
  41         };
  42         __u32 pad2;
  43         __u64 gs_eha;
  44         __u64 gs_eia;
  45         __u64 gs_eoa;
  46         __u64 gs_eir;
  47         __u64 gs_era;
  48 };
  49 
  50 #define GS_ENABLE       0
  51 #define GS_DISABLE      1
  52 #define GS_SET_BC_CB    2
  53 #define GS_CLEAR_BC_CB  3
  54 #define GS_BROADCAST    4
  55 
  56 static inline void load_gs_cb(struct gs_cb *gs_cb)
  57 {
  58         asm volatile(".insn rxy,0xe3000000004d,0,%0" : : "Q" (*gs_cb));
  59 }
  60 
  61 static inline void store_gs_cb(struct gs_cb *gs_cb)
  62 {
  63         asm volatile(".insn rxy,0xe30000000049,0,%0" : : "Q" (*gs_cb));
  64 }
  65 
  66 static inline void save_gs_cb(struct gs_cb *gs_cb)
  67 {
  68         if (gs_cb)
  69                 store_gs_cb(gs_cb);
  70 }
  71 
  72 static inline void restore_gs_cb(struct gs_cb *gs_cb)
  73 {
  74         if (gs_cb)
  75                 load_gs_cb(gs_cb);
  76 }
  77 
  78 #endif /* _GUARDED_STORAGE_H */

/* [<][>][^][v][top][bottom][index][help] */