~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/hexagon/include/uapi/asm/registers.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2 /*
  3  * Register definitions for the Hexagon architecture
  4  */
  5 
  6 
  7 #ifndef _ASM_REGISTERS_H
  8 #define _ASM_REGISTERS_H
  9 
 10 #ifndef __ASSEMBLY__
 11 
 12 /*  See kernel/entry.S for further documentation.  */
 13 
 14 /*
 15  * Entry code copies the event record out of guest registers into
 16  * this structure (which is on the stack).
 17  */
 18 
 19 struct hvm_event_record {
 20         unsigned long vmel;     /* Event Linkage (return address) */
 21         unsigned long vmest;    /* Event context - pre-event SSR values */
 22         unsigned long vmpsp;    /* Previous stack pointer */
 23         unsigned long vmbadva;  /* Bad virtual address for addressing events */
 24 };
 25 
 26 struct pt_regs {
 27         long restart_r0;        /* R0 checkpoint for syscall restart */
 28         long syscall_nr;        /* Only used in system calls */
 29         union {
 30                 struct {
 31                         unsigned long usr;
 32                         unsigned long preds;
 33                 };
 34                 long long int predsusr;
 35         };
 36         union {
 37                 struct {
 38                         unsigned long m0;
 39                         unsigned long m1;
 40                 };
 41                 long long int m1m0;
 42         };
 43         union {
 44                 struct {
 45                         unsigned long sa1;
 46                         unsigned long lc1;
 47                 };
 48                 long long int lc1sa1;
 49         };
 50         union {
 51                 struct {
 52                         unsigned long sa0;
 53                         unsigned long lc0;
 54                 };
 55                 long long int lc0sa0;
 56         };
 57         union {
 58                 struct {
 59                         unsigned long ugp;
 60                         unsigned long gp;
 61                 };
 62                 long long int gpugp;
 63         };
 64         union {
 65                 struct {
 66                         unsigned long cs0;
 67                         unsigned long cs1;
 68                 };
 69                 long long int cs1cs0;
 70         };
 71         /*
 72         * Be extremely careful with rearranging these, if at all.  Some code
 73         * assumes the 32 registers exist exactly like this in memory;
 74         * e.g. kernel/ptrace.c
 75         * e.g. kernel/signal.c (restore_sigcontext)
 76         */
 77         union {
 78                 struct {
 79                         unsigned long r00;
 80                         unsigned long r01;
 81                 };
 82                 long long int r0100;
 83         };
 84         union {
 85                 struct {
 86                         unsigned long r02;
 87                         unsigned long r03;
 88                 };
 89                 long long int r0302;
 90         };
 91         union {
 92                 struct {
 93                         unsigned long r04;
 94                         unsigned long r05;
 95                 };
 96                 long long int r0504;
 97         };
 98         union {
 99                 struct {
100                         unsigned long r06;
101                         unsigned long r07;
102                 };
103                 long long int r0706;
104         };
105         union {
106                 struct {
107                         unsigned long r08;
108                         unsigned long r09;
109                 };
110                 long long int r0908;
111         };
112         union {
113                struct {
114                         unsigned long r10;
115                         unsigned long r11;
116                };
117                long long int r1110;
118         };
119         union {
120                struct {
121                         unsigned long r12;
122                         unsigned long r13;
123                };
124                long long int r1312;
125         };
126         union {
127                struct {
128                         unsigned long r14;
129                         unsigned long r15;
130                };
131                long long int r1514;
132         };
133         union {
134                 struct {
135                         unsigned long r16;
136                         unsigned long r17;
137                 };
138                 long long int r1716;
139         };
140         union {
141                 struct {
142                         unsigned long r18;
143                         unsigned long r19;
144                 };
145                 long long int r1918;
146         };
147         union {
148                 struct {
149                         unsigned long r20;
150                         unsigned long r21;
151                 };
152                 long long int r2120;
153         };
154         union {
155                 struct {
156                         unsigned long r22;
157                         unsigned long r23;
158                 };
159                 long long int r2322;
160         };
161         union {
162                 struct {
163                         unsigned long r24;
164                         unsigned long r25;
165                 };
166                 long long int r2524;
167         };
168         union {
169                 struct {
170                         unsigned long r26;
171                         unsigned long r27;
172                 };
173                 long long int r2726;
174         };
175         union {
176                 struct {
177                         unsigned long r28;
178                         unsigned long r29;
179                };
180                long long int r2928;
181         };
182         union {
183                 struct {
184                         unsigned long r30;
185                         unsigned long r31;
186                 };
187                 long long int r3130;
188         };
189         /* VM dispatch pushes event record onto stack - we can build on it */
190         struct hvm_event_record hvmer;
191 };
192 
193 /* Defines to conveniently access the values  */
194 
195 /*
196  * As of the VM spec 0.5, these registers are now set/retrieved via a
197  * VM call.  On the in-bound side, we just fetch the values
198  * at the entry points and stuff them into the old record in pt_regs.
199  * However, on the outbound side, probably at VM rte, we set the
200  * registers back.
201  */
202 
203 #define pt_elr(regs) ((regs)->hvmer.vmel)
204 #define pt_set_elr(regs, val) ((regs)->hvmer.vmel = (val))
205 #define pt_cause(regs) ((regs)->hvmer.vmest & (HVM_VMEST_CAUSE_MSK))
206 #define user_mode(regs) \
207         (((regs)->hvmer.vmest & (HVM_VMEST_UM_MSK << HVM_VMEST_UM_SFT)) != 0)
208 #define ints_enabled(regs) \
209         (((regs)->hvmer.vmest & (HVM_VMEST_IE_MSK << HVM_VMEST_IE_SFT)) != 0)
210 #define pt_psp(regs) ((regs)->hvmer.vmpsp)
211 #define pt_badva(regs) ((regs)->hvmer.vmbadva)
212 
213 #define pt_set_singlestep(regs) ((regs)->hvmer.vmest |= (1<<HVM_VMEST_SS_SFT))
214 #define pt_clr_singlestep(regs) ((regs)->hvmer.vmest &= ~(1<<HVM_VMEST_SS_SFT))
215 
216 #define pt_set_rte_sp(regs, sp) do {\
217         pt_psp(regs) = (regs)->r29 = (sp);\
218         } while (0)
219 
220 #define pt_set_kmode(regs) \
221         (regs)->hvmer.vmest = (HVM_VMEST_IE_MSK << HVM_VMEST_IE_SFT)
222 
223 #define pt_set_usermode(regs) \
224         (regs)->hvmer.vmest = (HVM_VMEST_UM_MSK << HVM_VMEST_UM_SFT) \
225                             | (HVM_VMEST_IE_MSK << HVM_VMEST_IE_SFT)
226 
227 #endif  /*  ifndef __ASSEMBLY  */
228 
229 #endif
230 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php