This source file includes following definitions.
- get_domain
 
- set_domain
 
- get_domain
 
- set_domain
 
- modify_domain
 
   1 
   2 
   3 
   4 
   5 
   6 
   7 #ifndef __ASM_PROC_DOMAIN_H
   8 #define __ASM_PROC_DOMAIN_H
   9 
  10 #ifndef __ASSEMBLY__
  11 #include <asm/barrier.h>
  12 #include <asm/thread_info.h>
  13 #endif
  14 
  15 
  16 
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 
  33 #ifndef CONFIG_IO_36
  34 #define DOMAIN_KERNEL   0
  35 #define DOMAIN_USER     1
  36 #define DOMAIN_IO       2
  37 #else
  38 #define DOMAIN_KERNEL   2
  39 #define DOMAIN_USER     1
  40 #define DOMAIN_IO       0
  41 #endif
  42 #define DOMAIN_VECTORS  3
  43 
  44 
  45 
  46 
  47 #define DOMAIN_NOACCESS 0
  48 #define DOMAIN_CLIENT   1
  49 #ifdef CONFIG_CPU_USE_DOMAINS
  50 #define DOMAIN_MANAGER  3
  51 #else
  52 #define DOMAIN_MANAGER  1
  53 #endif
  54 
  55 #define domain_mask(dom)        ((3) << (2 * (dom)))
  56 #define domain_val(dom,type)    ((type) << (2 * (dom)))
  57 
  58 #ifdef CONFIG_CPU_SW_DOMAIN_PAN
  59 #define DACR_INIT \
  60         (domain_val(DOMAIN_USER, DOMAIN_NOACCESS) | \
  61          domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
  62          domain_val(DOMAIN_IO, DOMAIN_CLIENT) | \
  63          domain_val(DOMAIN_VECTORS, DOMAIN_CLIENT))
  64 #else
  65 #define DACR_INIT \
  66         (domain_val(DOMAIN_USER, DOMAIN_CLIENT) | \
  67          domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
  68          domain_val(DOMAIN_IO, DOMAIN_CLIENT) | \
  69          domain_val(DOMAIN_VECTORS, DOMAIN_CLIENT))
  70 #endif
  71 
  72 #define __DACR_DEFAULT \
  73         domain_val(DOMAIN_KERNEL, DOMAIN_CLIENT) | \
  74         domain_val(DOMAIN_IO, DOMAIN_CLIENT) | \
  75         domain_val(DOMAIN_VECTORS, DOMAIN_CLIENT)
  76 
  77 #define DACR_UACCESS_DISABLE    \
  78         (__DACR_DEFAULT | domain_val(DOMAIN_USER, DOMAIN_NOACCESS))
  79 #define DACR_UACCESS_ENABLE     \
  80         (__DACR_DEFAULT | domain_val(DOMAIN_USER, DOMAIN_CLIENT))
  81 
  82 #ifndef __ASSEMBLY__
  83 
  84 #ifdef CONFIG_CPU_CP15_MMU
  85 static __always_inline unsigned int get_domain(void)
  86 {
  87         unsigned int domain;
  88 
  89         asm(
  90         "mrc    p15, 0, %0, c3, c0      @ get domain"
  91          : "=r" (domain)
  92          : "m" (current_thread_info()->cpu_domain));
  93 
  94         return domain;
  95 }
  96 
  97 static __always_inline void set_domain(unsigned int val)
  98 {
  99         asm volatile(
 100         "mcr    p15, 0, %0, c3, c0      @ set domain"
 101           : : "r" (val) : "memory");
 102         isb();
 103 }
 104 #else
 105 static __always_inline unsigned int get_domain(void)
 106 {
 107         return 0;
 108 }
 109 
 110 static __always_inline void set_domain(unsigned int val)
 111 {
 112 }
 113 #endif
 114 
 115 #ifdef CONFIG_CPU_USE_DOMAINS
 116 #define modify_domain(dom,type)                                 \
 117         do {                                                    \
 118                 unsigned int domain = get_domain();             \
 119                 domain &= ~domain_mask(dom);                    \
 120                 domain = domain | domain_val(dom, type);        \
 121                 set_domain(domain);                             \
 122         } while (0)
 123 
 124 #else
 125 static inline void modify_domain(unsigned dom, unsigned type)   { }
 126 #endif
 127 
 128 
 129 
 130 
 131 
 132 #ifdef CONFIG_CPU_USE_DOMAINS
 133 #define TUSER(instr)            TUSERCOND(instr, )
 134 #define TUSERCOND(instr, cond)  #instr "t" #cond
 135 #else
 136 #define TUSER(instr)            TUSERCOND(instr, )
 137 #define TUSERCOND(instr, cond)  #instr #cond
 138 #endif
 139 
 140 #else 
 141 
 142 
 143 
 144 
 145 
 146 #ifdef CONFIG_CPU_USE_DOMAINS
 147 #define TUSER(instr)    instr ## t
 148 #else
 149 #define TUSER(instr)    instr
 150 #endif
 151 
 152 #endif 
 153 
 154 #endif