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

TOMOYO Linux Cross Reference
Linux/arch/sparc/include/asm/ttable.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ 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.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/sparc/include/asm/ttable.h (Architecture sparc64) and /arch/i386/include/asm-i386/ttable.h (Architecture i386)


  1 /* SPDX-License-Identifier: GPL-2.0 */              1 
  2 #ifndef _SPARC64_TTABLE_H                         
  3 #define _SPARC64_TTABLE_H                         
  4                                                   
  5 #include <asm/utrap.h>                            
  6 #include <asm/pil.h>                              
  7                                                   
  8 #ifdef __ASSEMBLY__                               
  9 #include <asm/thread_info.h>                      
 10 #endif                                            
 11                                                   
 12 #define BOOT_KERNEL b sparc64_boot; nop; nop;     
 13                                                   
 14 /* We need a "cleaned" instruction... */          
 15 #define CLEAN_WINDOW                              
 16         rdpr    %cleanwin, %l0;         add       
 17         wrpr    %l0, 0x0, %cleanwin;              
 18         clr     %o0;    clr     %o1;    clr       
 19         clr     %o4;    clr     %o5;    clr       
 20         clr     %l0;    clr     %l1;    clr       
 21         clr     %l4;    clr     %l5;    clr       
 22         retry;                                    
 23         nop;nop;nop;nop;nop;nop;nop;nop;nop;no    
 24                                                   
 25 #define TRAP(routine)                             
 26         sethi   %hi(109f), %g7;                   
 27         ba,pt   %xcc, etrap;                      
 28 109:     or     %g7, %lo(109b), %g7;              
 29         call    routine;                          
 30          add    %sp, PTREGS_OFF, %o0;             
 31         ba,pt   %xcc, rtrap;                      
 32          nop;                                     
 33         nop;                                      
 34                                                   
 35 #define TRAP_7INSNS(routine)                      
 36         sethi   %hi(109f), %g7;                   
 37         ba,pt   %xcc, etrap;                      
 38 109:     or     %g7, %lo(109b), %g7;              
 39         call    routine;                          
 40          add    %sp, PTREGS_OFF, %o0;             
 41         ba,pt   %xcc, rtrap;                      
 42          nop;                                     
 43                                                   
 44 #define TRAP_SAVEFPU(routine)                     
 45         sethi   %hi(109f), %g7;                   
 46         ba,pt   %xcc, do_fptrap;                  
 47 109:     or     %g7, %lo(109b), %g7;              
 48         call    routine;                          
 49          add    %sp, PTREGS_OFF, %o0;             
 50         ba,pt   %xcc, rtrap;                      
 51          nop;                                     
 52         nop;                                      
 53                                                   
 54 #define TRAP_NOSAVE(routine)                      
 55         ba,pt   %xcc, routine;                    
 56          nop;                                     
 57         nop; nop; nop; nop; nop; nop;             
 58                                                   
 59 #define TRAP_NOSAVE_7INSNS(routine)               
 60         ba,pt   %xcc, routine;                    
 61          nop;                                     
 62         nop; nop; nop; nop; nop;                  
 63                                                   
 64 #define TRAPTL1(routine)                          
 65         sethi   %hi(109f), %g7;                   
 66         ba,pt   %xcc, etraptl1;                   
 67 109:     or     %g7, %lo(109b), %g7;              
 68         call    routine;                          
 69          add    %sp, PTREGS_OFF, %o0;             
 70         ba,pt   %xcc, rtrap;                      
 71          nop;                                     
 72         nop;                                      
 73                                                   
 74 #define TRAP_ARG(routine, arg)                    
 75         sethi   %hi(109f), %g7;                   
 76         ba,pt   %xcc, etrap;                      
 77 109:     or     %g7, %lo(109b), %g7;              
 78         add     %sp, PTREGS_OFF, %o0;             
 79         call    routine;                          
 80          mov    arg, %o1;                         
 81         ba,pt   %xcc, rtrap;                      
 82          nop;                                     
 83                                                   
 84 #define TRAPTL1_ARG(routine, arg)                 
 85         sethi   %hi(109f), %g7;                   
 86         ba,pt   %xcc, etraptl1;                   
 87 109:     or     %g7, %lo(109b), %g7;              
 88         add     %sp, PTREGS_OFF, %o0;             
 89         call    routine;                          
 90          mov    arg, %o1;                         
 91         ba,pt   %xcc, rtrap;                      
 92          nop;                                     
 93                                                   
 94 #define SYSCALL_TRAP(routine, systbl)             
 95         rdpr    %pil, %g2;                        
 96         mov     TSTATE_SYSCALL, %g3;              
 97         sethi   %hi(109f), %g7;                   
 98         ba,pt   %xcc, etrap_syscall;              
 99 109:     or     %g7, %lo(109b), %g7;              
100         sethi   %hi(systbl), %l7;                 
101         ba,pt   %xcc, routine;                    
102          or     %l7, %lo(systbl), %l7;            
103                                                   
104 #define TRAP_UTRAP(handler,lvl)                   
105         mov     handler, %g3;                     
106         ba,pt   %xcc, utrap_trap;                 
107          mov    lvl, %g4;                         
108         nop;                                      
109         nop;                                      
110         nop;                                      
111         nop;                                      
112         nop;                                      
113                                                   
114 #ifdef CONFIG_COMPAT                              
115 #define LINUX_32BIT_SYSCALL_TRAP SYSCALL_TRAP(    
116 #else                                             
117 #define LINUX_32BIT_SYSCALL_TRAP BTRAP(0x110)     
118 #endif                                            
119 #define LINUX_64BIT_SYSCALL_TRAP SYSCALL_TRAP(    
120 #define GETCC_TRAP TRAP(getcc)                    
121 #define SETCC_TRAP TRAP(setcc)                    
122 #define BREAKPOINT_TRAP TRAP(breakpoint_trap)     
123                                                   
124 #ifdef CONFIG_TRACE_IRQFLAGS                      
125                                                   
126 #define TRAP_IRQ(routine, level)                  
127         rdpr    %pil, %g2;                        
128         wrpr    %g0, PIL_NORMAL_MAX, %pil;        
129         sethi   %hi(1f-4), %g7;                   
130         ba,pt   %xcc, etrap_irq;                  
131          or     %g7, %lo(1f-4), %g7;              
132         nop;                                      
133         nop;                                      
134         nop;                                      
135         .subsection     2;                        
136 1:      call    trace_hardirqs_off;               
137          nop;                                     
138         mov     level, %o0;                       
139         call    routine;                          
140          add    %sp, PTREGS_OFF, %o1;             
141         ba,a,pt %xcc, rtrap_irq;                  
142         .previous;                                
143                                                   
144 #else                                             
145                                                   
146 #define TRAP_IRQ(routine, level)                  
147         rdpr    %pil, %g2;                        
148         wrpr    %g0, PIL_NORMAL_MAX, %pil;        
149         ba,pt   %xcc, etrap_irq;                  
150          rd     %pc, %g7;                         
151         mov     level, %o0;                       
152         call    routine;                          
153          add    %sp, PTREGS_OFF, %o1;             
154         ba,a,pt %xcc, rtrap_irq;                  
155                                                   
156 #endif                                            
157                                                   
158 #define TRAP_NMI_IRQ(routine, level)              
159         rdpr    %pil, %g2;                        
160         wrpr    %g0, PIL_NMI, %pil;               
161         ba,pt   %xcc, etrap_irq;                  
162          rd     %pc, %g7;                         
163         mov     level, %o0;                       
164         call    routine;                          
165          add    %sp, PTREGS_OFF, %o1;             
166         ba,a,pt %xcc, rtrap_nmi;                  
167                                                   
168 #define TRAP_IVEC TRAP_NOSAVE(do_ivec)            
169                                                   
170 #define BTRAP(lvl) TRAP_ARG(bad_trap, lvl)        
171                                                   
172 #define BTRAPTL1(lvl) TRAPTL1_ARG(bad_trap_tl1    
173                                                   
174 #define FLUSH_WINDOW_TRAP                         
175         ba,pt   %xcc, etrap;                      
176          rd     %pc, %g7;                         
177         flushw;                                   
178         ldx     [%sp + PTREGS_OFF + PT_V9_TNPC    
179         add     %l1, 4, %l2;                      
180         stx     %l1, [%sp + PTREGS_OFF + PT_V9    
181         ba,pt   %xcc, rtrap;                      
182          stx    %l2, [%sp + PTREGS_OFF + PT_V9    
183                                                   
184 #ifdef CONFIG_KPROBES                             
185 #define KPROBES_TRAP(lvl) TRAP_IRQ(kprobe_trap    
186 #else                                             
187 #define KPROBES_TRAP(lvl) TRAP_ARG(bad_trap, l    
188 #endif                                            
189                                                   
190 #ifdef CONFIG_UPROBES                             
191 #define UPROBES_TRAP(lvl) TRAP_ARG(uprobe_trap    
192 #else                                             
193 #define UPROBES_TRAP(lvl) TRAP_ARG(bad_trap, l    
194 #endif                                            
195                                                   
196 #ifdef CONFIG_KGDB                                
197 #define KGDB_TRAP(lvl) TRAP_IRQ(kgdb_trap, lvl    
198 #else                                             
199 #define KGDB_TRAP(lvl) TRAP_ARG(bad_trap, lvl)    
200 #endif                                            
201                                                   
202 #define SUN4V_ITSB_MISS                           
203         ldxa    [%g0] ASI_SCRATCHPAD, %g2;        
204         ldx     [%g2 + HV_FAULT_I_ADDR_OFFSET]    
205         ldx     [%g2 + HV_FAULT_I_CTX_OFFSET],    
206         srlx    %g4, 22, %g6;                     
207         ba,pt   %xcc, sun4v_itsb_miss;            
208          nop;                                     
209         nop;                                      
210         nop;                                      
211                                                   
212 #define SUN4V_DTSB_MISS                           
213         ldxa    [%g0] ASI_SCRATCHPAD, %g2;        
214         ldx     [%g2 + HV_FAULT_D_ADDR_OFFSET]    
215         ldx     [%g2 + HV_FAULT_D_CTX_OFFSET],    
216         srlx    %g4, 22, %g6;                     
217         ba,pt   %xcc, sun4v_dtsb_miss;            
218          nop;                                     
219         nop;                                      
220         nop;                                      
221                                                   
222 #define SUN4V_MCD_PRECISE                         
223         ldxa    [%g0] ASI_SCRATCHPAD, %g2;        
224         ldx     [%g2 + HV_FAULT_D_ADDR_OFFSET]    
225         ldx     [%g2 + HV_FAULT_D_CTX_OFFSET],    
226         ba,pt   %xcc, etrap;                      
227          rd     %pc, %g7;                         
228         ba,pt   %xcc, sun4v_mcd_detect_precise    
229          nop;                                     
230         nop;                                      
231                                                   
232 /* Before touching these macros, you owe it to    
233  * see how arch/sparc64/kernel/winfixup.S work    
234  *                                                
235  * For the user cases we used to use the %asi     
236  * it turns out that the "wr xxx, %asi" costs     
237  * now we use immediate ASI loads and stores i    
238  * to Greg Onufer for pointing out this perfor    
239  *                                                
240  * Further note that we cannot use the g2, g4,    
241  * globals in the spill routines, check out th    
242  * arch/sparc64/kernel/etrap.S to see what I m    
243  * g4/g5 are the globals which are preserved b    
244  * for the caller of it.  The g7 register is t    
245  * etrap.  Finally, g6 is the current thread r    
246  * us it in the spill handlers either.  Most o    
247  * apply to fill processing, only g6 is not us    
248  */                                               
249                                                   
250 /* Normal kernel spill */                         
251 #define SPILL_0_NORMAL                            
252         stx     %l0, [%sp + STACK_BIAS + 0x00]    
253         stx     %l1, [%sp + STACK_BIAS + 0x08]    
254         stx     %l2, [%sp + STACK_BIAS + 0x10]    
255         stx     %l3, [%sp + STACK_BIAS + 0x18]    
256         stx     %l4, [%sp + STACK_BIAS + 0x20]    
257         stx     %l5, [%sp + STACK_BIAS + 0x28]    
258         stx     %l6, [%sp + STACK_BIAS + 0x30]    
259         stx     %l7, [%sp + STACK_BIAS + 0x38]    
260         stx     %i0, [%sp + STACK_BIAS + 0x40]    
261         stx     %i1, [%sp + STACK_BIAS + 0x48]    
262         stx     %i2, [%sp + STACK_BIAS + 0x50]    
263         stx     %i3, [%sp + STACK_BIAS + 0x58]    
264         stx     %i4, [%sp + STACK_BIAS + 0x60]    
265         stx     %i5, [%sp + STACK_BIAS + 0x68]    
266         stx     %i6, [%sp + STACK_BIAS + 0x70]    
267         stx     %i7, [%sp + STACK_BIAS + 0x78]    
268         saved; retry; nop; nop; nop; nop; nop;    
269         nop; nop; nop; nop; nop; nop; nop; nop    
270                                                   
271 #define SPILL_0_NORMAL_ETRAP                      
272 etrap_kernel_spill:                               
273         stx     %l0, [%sp + STACK_BIAS + 0x00]    
274         stx     %l1, [%sp + STACK_BIAS + 0x08]    
275         stx     %l2, [%sp + STACK_BIAS + 0x10]    
276         stx     %l3, [%sp + STACK_BIAS + 0x18]    
277         stx     %l4, [%sp + STACK_BIAS + 0x20]    
278         stx     %l5, [%sp + STACK_BIAS + 0x28]    
279         stx     %l6, [%sp + STACK_BIAS + 0x30]    
280         stx     %l7, [%sp + STACK_BIAS + 0x38]    
281         stx     %i0, [%sp + STACK_BIAS + 0x40]    
282         stx     %i1, [%sp + STACK_BIAS + 0x48]    
283         stx     %i2, [%sp + STACK_BIAS + 0x50]    
284         stx     %i3, [%sp + STACK_BIAS + 0x58]    
285         stx     %i4, [%sp + STACK_BIAS + 0x60]    
286         stx     %i5, [%sp + STACK_BIAS + 0x68]    
287         stx     %i6, [%sp + STACK_BIAS + 0x70]    
288         stx     %i7, [%sp + STACK_BIAS + 0x78]    
289         saved;                                    
290         sub     %g1, 2, %g1;                      
291         ba,pt   %xcc, etrap_save;                 
292         wrpr    %g1, %cwp;                        
293         nop; nop; nop; nop; nop; nop; nop; nop    
294         nop; nop; nop; nop;                       
295                                                   
296 /* Normal 64bit spill */                          
297 #define SPILL_1_GENERIC(ASI)                      
298         add     %sp, STACK_BIAS + 0x00, %g1;      
299         stxa    %l0, [%g1 + %g0] ASI;             
300         mov     0x08, %g3;                        
301         stxa    %l1, [%g1 + %g3] ASI;             
302         add     %g1, 0x10, %g1;                   
303         stxa    %l2, [%g1 + %g0] ASI;             
304         stxa    %l3, [%g1 + %g3] ASI;             
305         add     %g1, 0x10, %g1;                   
306         stxa    %l4, [%g1 + %g0] ASI;             
307         stxa    %l5, [%g1 + %g3] ASI;             
308         add     %g1, 0x10, %g1;                   
309         stxa    %l6, [%g1 + %g0] ASI;             
310         stxa    %l7, [%g1 + %g3] ASI;             
311         add     %g1, 0x10, %g1;                   
312         stxa    %i0, [%g1 + %g0] ASI;             
313         stxa    %i1, [%g1 + %g3] ASI;             
314         add     %g1, 0x10, %g1;                   
315         stxa    %i2, [%g1 + %g0] ASI;             
316         stxa    %i3, [%g1 + %g3] ASI;             
317         add     %g1, 0x10, %g1;                   
318         stxa    %i4, [%g1 + %g0] ASI;             
319         stxa    %i5, [%g1 + %g3] ASI;             
320         add     %g1, 0x10, %g1;                   
321         stxa    %i6, [%g1 + %g0] ASI;             
322         stxa    %i7, [%g1 + %g3] ASI;             
323         saved;                                    
324         retry; nop; nop;                          
325         b,a,pt  %xcc, spill_fixup_dax;            
326         b,a,pt  %xcc, spill_fixup_mna;            
327         b,a,pt  %xcc, spill_fixup;                
328                                                   
329 #define SPILL_1_GENERIC_ETRAP                     
330 etrap_user_spill_64bit:                           
331         stxa    %l0, [%sp + STACK_BIAS + 0x00]    
332         stxa    %l1, [%sp + STACK_BIAS + 0x08]    
333         stxa    %l2, [%sp + STACK_BIAS + 0x10]    
334         stxa    %l3, [%sp + STACK_BIAS + 0x18]    
335         stxa    %l4, [%sp + STACK_BIAS + 0x20]    
336         stxa    %l5, [%sp + STACK_BIAS + 0x28]    
337         stxa    %l6, [%sp + STACK_BIAS + 0x30]    
338         stxa    %l7, [%sp + STACK_BIAS + 0x38]    
339         stxa    %i0, [%sp + STACK_BIAS + 0x40]    
340         stxa    %i1, [%sp + STACK_BIAS + 0x48]    
341         stxa    %i2, [%sp + STACK_BIAS + 0x50]    
342         stxa    %i3, [%sp + STACK_BIAS + 0x58]    
343         stxa    %i4, [%sp + STACK_BIAS + 0x60]    
344         stxa    %i5, [%sp + STACK_BIAS + 0x68]    
345         stxa    %i6, [%sp + STACK_BIAS + 0x70]    
346         stxa    %i7, [%sp + STACK_BIAS + 0x78]    
347         saved;                                    
348         sub     %g1, 2, %g1;                      
349         ba,pt   %xcc, etrap_save;                 
350          wrpr   %g1, %cwp;                        
351         nop; nop; nop; nop; nop;                  
352         nop; nop; nop; nop;                       
353         ba,a,pt %xcc, etrap_spill_fixup_64bit;    
354         ba,a,pt %xcc, etrap_spill_fixup_64bit;    
355         ba,a,pt %xcc, etrap_spill_fixup_64bit;    
356                                                   
357 #define SPILL_1_GENERIC_ETRAP_FIXUP               
358 etrap_spill_fixup_64bit:                          
359         ldub    [%g6 + TI_WSAVED], %g1;           
360         sll     %g1, 3, %g3;                      
361         add     %g6, %g3, %g3;                    
362         stx     %sp, [%g3 + TI_RWIN_SPTRS];       
363         sll     %g1, 7, %g3;                      
364         add     %g6, %g3, %g3;                    
365         stx     %l0, [%g3 + TI_REG_WINDOW + 0x    
366         stx     %l1, [%g3 + TI_REG_WINDOW + 0x    
367         stx     %l2, [%g3 + TI_REG_WINDOW + 0x    
368         stx     %l3, [%g3 + TI_REG_WINDOW + 0x    
369         stx     %l4, [%g3 + TI_REG_WINDOW + 0x    
370         stx     %l5, [%g3 + TI_REG_WINDOW + 0x    
371         stx     %l6, [%g3 + TI_REG_WINDOW + 0x    
372         stx     %l7, [%g3 + TI_REG_WINDOW + 0x    
373         stx     %i0, [%g3 + TI_REG_WINDOW + 0x    
374         stx     %i1, [%g3 + TI_REG_WINDOW + 0x    
375         stx     %i2, [%g3 + TI_REG_WINDOW + 0x    
376         stx     %i3, [%g3 + TI_REG_WINDOW + 0x    
377         stx     %i4, [%g3 + TI_REG_WINDOW + 0x    
378         stx     %i5, [%g3 + TI_REG_WINDOW + 0x    
379         stx     %i6, [%g3 + TI_REG_WINDOW + 0x    
380         stx     %i7, [%g3 + TI_REG_WINDOW + 0x    
381         add     %g1, 1, %g1;                      
382         stb     %g1, [%g6 + TI_WSAVED];           
383         saved;                                    
384         rdpr    %cwp, %g1;                        
385         sub     %g1, 2, %g1;                      
386         ba,pt   %xcc, etrap_save;                 
387          wrpr   %g1, %cwp;                        
388         nop; nop; nop                             
389                                                   
390 /* Normal 32bit spill */                          
391 #define SPILL_2_GENERIC(ASI)                      
392         and     %sp, 1, %g3;                      
393         brnz,pn %g3, (. - (128 + 4));             
394          srl    %sp, 0, %sp;                      
395         stwa    %l0, [%sp + %g0] ASI;             
396         mov     0x04, %g3;                        
397         stwa    %l1, [%sp + %g3] ASI;             
398         add     %sp, 0x08, %g1;                   
399         stwa    %l2, [%g1 + %g0] ASI;             
400         stwa    %l3, [%g1 + %g3] ASI;             
401         add     %g1, 0x08, %g1;                   
402         stwa    %l4, [%g1 + %g0] ASI;             
403         stwa    %l5, [%g1 + %g3] ASI;             
404         add     %g1, 0x08, %g1;                   
405         stwa    %l6, [%g1 + %g0] ASI;             
406         stwa    %l7, [%g1 + %g3] ASI;             
407         add     %g1, 0x08, %g1;                   
408         stwa    %i0, [%g1 + %g0] ASI;             
409         stwa    %i1, [%g1 + %g3] ASI;             
410         add     %g1, 0x08, %g1;                   
411         stwa    %i2, [%g1 + %g0] ASI;             
412         stwa    %i3, [%g1 + %g3] ASI;             
413         add     %g1, 0x08, %g1;                   
414         stwa    %i4, [%g1 + %g0] ASI;             
415         stwa    %i5, [%g1 + %g3] ASI;             
416         add     %g1, 0x08, %g1;                   
417         stwa    %i6, [%g1 + %g0] ASI;             
418         stwa    %i7, [%g1 + %g3] ASI;             
419         saved;                                    
420         retry;                                    
421         b,a,pt  %xcc, spill_fixup_dax;            
422         b,a,pt  %xcc, spill_fixup_mna;            
423         b,a,pt  %xcc, spill_fixup;                
424                                                   
425 #define SPILL_2_GENERIC_ETRAP           \         
426 etrap_user_spill_32bit:                 \         
427         and     %sp, 1, %g3;            \         
428         brnz,pn %g3, etrap_user_spill_64bit;      
429          srl    %sp, 0, %sp;            \         
430         stwa    %l0, [%sp + 0x00] %asi; \         
431         stwa    %l1, [%sp + 0x04] %asi; \         
432         stwa    %l2, [%sp + 0x08] %asi; \         
433         stwa    %l3, [%sp + 0x0c] %asi; \         
434         stwa    %l4, [%sp + 0x10] %asi; \         
435         stwa    %l5, [%sp + 0x14] %asi; \         
436         stwa    %l6, [%sp + 0x18] %asi; \         
437         stwa    %l7, [%sp + 0x1c] %asi; \         
438         stwa    %i0, [%sp + 0x20] %asi; \         
439         stwa    %i1, [%sp + 0x24] %asi; \         
440         stwa    %i2, [%sp + 0x28] %asi; \         
441         stwa    %i3, [%sp + 0x2c] %asi; \         
442         stwa    %i4, [%sp + 0x30] %asi; \         
443         stwa    %i5, [%sp + 0x34] %asi; \         
444         stwa    %i6, [%sp + 0x38] %asi; \         
445         stwa    %i7, [%sp + 0x3c] %asi; \         
446         saved;                          \         
447         sub     %g1, 2, %g1;            \         
448         ba,pt   %xcc, etrap_save;       \         
449          wrpr   %g1, %cwp;              \         
450         nop; nop; nop; nop;             \         
451         nop; nop;                       \         
452         ba,a,pt %xcc, etrap_spill_fixup_32bit;    
453         ba,a,pt %xcc, etrap_spill_fixup_32bit;    
454         ba,a,pt %xcc, etrap_spill_fixup_32bit;    
455                                                   
456 #define SPILL_2_GENERIC_ETRAP_FIXUP               
457 etrap_spill_fixup_32bit:                          
458         ldub    [%g6 + TI_WSAVED], %g1;           
459         sll     %g1, 3, %g3;                      
460         add     %g6, %g3, %g3;                    
461         stx     %sp, [%g3 + TI_RWIN_SPTRS];       
462         sll     %g1, 7, %g3;                      
463         add     %g6, %g3, %g3;                    
464         stw     %l0, [%g3 + TI_REG_WINDOW + 0x    
465         stw     %l1, [%g3 + TI_REG_WINDOW + 0x    
466         stw     %l2, [%g3 + TI_REG_WINDOW + 0x    
467         stw     %l3, [%g3 + TI_REG_WINDOW + 0x    
468         stw     %l4, [%g3 + TI_REG_WINDOW + 0x    
469         stw     %l5, [%g3 + TI_REG_WINDOW + 0x    
470         stw     %l6, [%g3 + TI_REG_WINDOW + 0x    
471         stw     %l7, [%g3 + TI_REG_WINDOW + 0x    
472         stw     %i0, [%g3 + TI_REG_WINDOW + 0x    
473         stw     %i1, [%g3 + TI_REG_WINDOW + 0x    
474         stw     %i2, [%g3 + TI_REG_WINDOW + 0x    
475         stw     %i3, [%g3 + TI_REG_WINDOW + 0x    
476         stw     %i4, [%g3 + TI_REG_WINDOW + 0x    
477         stw     %i5, [%g3 + TI_REG_WINDOW + 0x    
478         stw     %i6, [%g3 + TI_REG_WINDOW + 0x    
479         stw     %i7, [%g3 + TI_REG_WINDOW + 0x    
480         add     %g1, 1, %g1;                      
481         stb     %g1, [%g6 + TI_WSAVED];           
482         saved;                                    
483         rdpr    %cwp, %g1;                        
484         sub     %g1, 2, %g1;                      
485         ba,pt   %xcc, etrap_save;                 
486          wrpr   %g1, %cwp;                        
487         nop; nop; nop                             
488                                                   
489 #define SPILL_1_NORMAL SPILL_1_GENERIC(ASI_AIU    
490 #define SPILL_2_NORMAL SPILL_2_GENERIC(ASI_AIU    
491 #define SPILL_3_NORMAL SPILL_0_NORMAL             
492 #define SPILL_4_NORMAL SPILL_0_NORMAL             
493 #define SPILL_5_NORMAL SPILL_0_NORMAL             
494 #define SPILL_6_NORMAL SPILL_0_NORMAL             
495 #define SPILL_7_NORMAL SPILL_0_NORMAL             
496                                                   
497 #define SPILL_0_OTHER SPILL_0_NORMAL              
498 #define SPILL_1_OTHER SPILL_1_GENERIC(ASI_AIUS    
499 #define SPILL_2_OTHER SPILL_2_GENERIC(ASI_AIUS    
500 #define SPILL_3_OTHER SPILL_3_NORMAL              
501 #define SPILL_4_OTHER SPILL_4_NORMAL              
502 #define SPILL_5_OTHER SPILL_5_NORMAL              
503 #define SPILL_6_OTHER SPILL_6_NORMAL              
504 #define SPILL_7_OTHER SPILL_7_NORMAL              
505                                                   
506 /* Normal kernel fill */                          
507 #define FILL_0_NORMAL                             
508         ldx     [%sp + STACK_BIAS + 0x00], %l0    
509         ldx     [%sp + STACK_BIAS + 0x08], %l1    
510         ldx     [%sp + STACK_BIAS + 0x10], %l2    
511         ldx     [%sp + STACK_BIAS + 0x18], %l3    
512         ldx     [%sp + STACK_BIAS + 0x20], %l4    
513         ldx     [%sp + STACK_BIAS + 0x28], %l5    
514         ldx     [%sp + STACK_BIAS + 0x30], %l6    
515         ldx     [%sp + STACK_BIAS + 0x38], %l7    
516         ldx     [%sp + STACK_BIAS + 0x40], %i0    
517         ldx     [%sp + STACK_BIAS + 0x48], %i1    
518         ldx     [%sp + STACK_BIAS + 0x50], %i2    
519         ldx     [%sp + STACK_BIAS + 0x58], %i3    
520         ldx     [%sp + STACK_BIAS + 0x60], %i4    
521         ldx     [%sp + STACK_BIAS + 0x68], %i5    
522         ldx     [%sp + STACK_BIAS + 0x70], %i6    
523         ldx     [%sp + STACK_BIAS + 0x78], %i7    
524         restored; retry; nop; nop; nop; nop; n    
525         nop; nop; nop; nop; nop; nop; nop; nop    
526                                                   
527 #define FILL_0_NORMAL_RTRAP                       
528 kern_rtt_fill:                                    
529         rdpr    %cwp, %g1;                        
530         sub     %g1, 1, %g1;                      
531         wrpr    %g1, %cwp;                        
532         ldx     [%sp + STACK_BIAS + 0x00], %l0    
533         ldx     [%sp + STACK_BIAS + 0x08], %l1    
534         ldx     [%sp + STACK_BIAS + 0x10], %l2    
535         ldx     [%sp + STACK_BIAS + 0x18], %l3    
536         ldx     [%sp + STACK_BIAS + 0x20], %l4    
537         ldx     [%sp + STACK_BIAS + 0x28], %l5    
538         ldx     [%sp + STACK_BIAS + 0x30], %l6    
539         ldx     [%sp + STACK_BIAS + 0x38], %l7    
540         ldx     [%sp + STACK_BIAS + 0x40], %i0    
541         ldx     [%sp + STACK_BIAS + 0x48], %i1    
542         ldx     [%sp + STACK_BIAS + 0x50], %i2    
543         ldx     [%sp + STACK_BIAS + 0x58], %i3    
544         ldx     [%sp + STACK_BIAS + 0x60], %i4    
545         ldx     [%sp + STACK_BIAS + 0x68], %i5    
546         ldx     [%sp + STACK_BIAS + 0x70], %i6    
547         ldx     [%sp + STACK_BIAS + 0x78], %i7    
548         restored;                                 
549         add     %g1, 1, %g1;                      
550         ba,pt   %xcc, kern_rtt_restore;           
551          wrpr   %g1, %cwp;                        
552         nop; nop; nop; nop; nop;                  
553         nop; nop; nop; nop;                       
554                                                   
555                                                   
556 /* Normal 64bit fill */                           
557 #define FILL_1_GENERIC(ASI)                       
558         add     %sp, STACK_BIAS + 0x00, %g1;      
559         ldxa    [%g1 + %g0] ASI, %l0;             
560         mov     0x08, %g2;                        
561         mov     0x10, %g3;                        
562         ldxa    [%g1 + %g2] ASI, %l1;             
563         mov     0x18, %g5;                        
564         ldxa    [%g1 + %g3] ASI, %l2;             
565         ldxa    [%g1 + %g5] ASI, %l3;             
566         add     %g1, 0x20, %g1;                   
567         ldxa    [%g1 + %g0] ASI, %l4;             
568         ldxa    [%g1 + %g2] ASI, %l5;             
569         ldxa    [%g1 + %g3] ASI, %l6;             
570         ldxa    [%g1 + %g5] ASI, %l7;             
571         add     %g1, 0x20, %g1;                   
572         ldxa    [%g1 + %g0] ASI, %i0;             
573         ldxa    [%g1 + %g2] ASI, %i1;             
574         ldxa    [%g1 + %g3] ASI, %i2;             
575         ldxa    [%g1 + %g5] ASI, %i3;             
576         add     %g1, 0x20, %g1;                   
577         ldxa    [%g1 + %g0] ASI, %i4;             
578         ldxa    [%g1 + %g2] ASI, %i5;             
579         ldxa    [%g1 + %g3] ASI, %i6;             
580         ldxa    [%g1 + %g5] ASI, %i7;             
581         restored;                                 
582         retry; nop; nop; nop; nop;                
583         b,a,pt  %xcc, fill_fixup_dax;             
584         b,a,pt  %xcc, fill_fixup_mna;             
585         b,a,pt  %xcc, fill_fixup;                 
586                                                   
587 #define FILL_1_GENERIC_RTRAP                      
588 user_rtt_fill_64bit:                              
589         ldxa    [%sp + STACK_BIAS + 0x00] %asi    
590         ldxa    [%sp + STACK_BIAS + 0x08] %asi    
591         ldxa    [%sp + STACK_BIAS + 0x10] %asi    
592         ldxa    [%sp + STACK_BIAS + 0x18] %asi    
593         ldxa    [%sp + STACK_BIAS + 0x20] %asi    
594         ldxa    [%sp + STACK_BIAS + 0x28] %asi    
595         ldxa    [%sp + STACK_BIAS + 0x30] %asi    
596         ldxa    [%sp + STACK_BIAS + 0x38] %asi    
597         ldxa    [%sp + STACK_BIAS + 0x40] %asi    
598         ldxa    [%sp + STACK_BIAS + 0x48] %asi    
599         ldxa    [%sp + STACK_BIAS + 0x50] %asi    
600         ldxa    [%sp + STACK_BIAS + 0x58] %asi    
601         ldxa    [%sp + STACK_BIAS + 0x60] %asi    
602         ldxa    [%sp + STACK_BIAS + 0x68] %asi    
603         ldxa    [%sp + STACK_BIAS + 0x70] %asi    
604         ldxa    [%sp + STACK_BIAS + 0x78] %asi    
605         ba,pt   %xcc, user_rtt_pre_restore;       
606          restored;                                
607         nop; nop; nop; nop; nop; nop;             
608         nop; nop; nop; nop; nop;                  
609         ba,a,pt %xcc, user_rtt_fill_fixup_dax;    
610         ba,a,pt %xcc, user_rtt_fill_fixup_mna;    
611         ba,a,pt %xcc, user_rtt_fill_fixup;        
612                                                   
613                                                   
614 /* Normal 32bit fill */                           
615 #define FILL_2_GENERIC(ASI)                       
616         and     %sp, 1, %g3;                      
617         brnz,pn %g3, (. - (128 + 4));             
618          srl    %sp, 0, %sp;                      
619         lduwa   [%sp + %g0] ASI, %l0;             
620         mov     0x04, %g2;                        
621         mov     0x08, %g3;                        
622         lduwa   [%sp + %g2] ASI, %l1;             
623         mov     0x0c, %g5;                        
624         lduwa   [%sp + %g3] ASI, %l2;             
625         lduwa   [%sp + %g5] ASI, %l3;             
626         add     %sp, 0x10, %g1;                   
627         lduwa   [%g1 + %g0] ASI, %l4;             
628         lduwa   [%g1 + %g2] ASI, %l5;             
629         lduwa   [%g1 + %g3] ASI, %l6;             
630         lduwa   [%g1 + %g5] ASI, %l7;             
631         add     %g1, 0x10, %g1;                   
632         lduwa   [%g1 + %g0] ASI, %i0;             
633         lduwa   [%g1 + %g2] ASI, %i1;             
634         lduwa   [%g1 + %g3] ASI, %i2;             
635         lduwa   [%g1 + %g5] ASI, %i3;             
636         add     %g1, 0x10, %g1;                   
637         lduwa   [%g1 + %g0] ASI, %i4;             
638         lduwa   [%g1 + %g2] ASI, %i5;             
639         lduwa   [%g1 + %g3] ASI, %i6;             
640         lduwa   [%g1 + %g5] ASI, %i7;             
641         restored;                                 
642         retry; nop; nop;                          
643         b,a,pt  %xcc, fill_fixup_dax;             
644         b,a,pt  %xcc, fill_fixup_mna;             
645         b,a,pt  %xcc, fill_fixup;                 
646                                                   
647 #define FILL_2_GENERIC_RTRAP                      
648 user_rtt_fill_32bit:                              
649         and     %sp, 1, %g3;                      
650         brnz,pn %g3, user_rtt_fill_64bit;         
651          srl    %sp, 0, %sp;                      
652         lduwa   [%sp + 0x00] %asi, %l0;           
653         lduwa   [%sp + 0x04] %asi, %l1;           
654         lduwa   [%sp + 0x08] %asi, %l2;           
655         lduwa   [%sp + 0x0c] %asi, %l3;           
656         lduwa   [%sp + 0x10] %asi, %l4;           
657         lduwa   [%sp + 0x14] %asi, %l5;           
658         lduwa   [%sp + 0x18] %asi, %l6;           
659         lduwa   [%sp + 0x1c] %asi, %l7;           
660         lduwa   [%sp + 0x20] %asi, %i0;           
661         lduwa   [%sp + 0x24] %asi, %i1;           
662         lduwa   [%sp + 0x28] %asi, %i2;           
663         lduwa   [%sp + 0x2c] %asi, %i3;           
664         lduwa   [%sp + 0x30] %asi, %i4;           
665         lduwa   [%sp + 0x34] %asi, %i5;           
666         lduwa   [%sp + 0x38] %asi, %i6;           
667         lduwa   [%sp + 0x3c] %asi, %i7;           
668         ba,pt   %xcc, user_rtt_pre_restore;       
669          restored;                                
670         nop; nop; nop; nop; nop;                  
671         nop; nop; nop;                            
672         ba,a,pt %xcc, user_rtt_fill_fixup_dax;    
673         ba,a,pt %xcc, user_rtt_fill_fixup_mna;    
674         ba,a,pt %xcc, user_rtt_fill_fixup;        
675                                                   
676                                                   
677 #define FILL_1_NORMAL FILL_1_GENERIC(ASI_AIUP)    
678 #define FILL_2_NORMAL FILL_2_GENERIC(ASI_AIUP)    
679 #define FILL_3_NORMAL FILL_0_NORMAL               
680 #define FILL_4_NORMAL FILL_0_NORMAL               
681 #define FILL_5_NORMAL FILL_0_NORMAL               
682 #define FILL_6_NORMAL FILL_0_NORMAL               
683 #define FILL_7_NORMAL FILL_0_NORMAL               
684                                                   
685 #define FILL_0_OTHER FILL_0_NORMAL                
686 #define FILL_1_OTHER FILL_1_GENERIC(ASI_AIUS)     
687 #define FILL_2_OTHER FILL_2_GENERIC(ASI_AIUS)     
688 #define FILL_3_OTHER FILL_3_NORMAL                
689 #define FILL_4_OTHER FILL_4_NORMAL                
690 #define FILL_5_OTHER FILL_5_NORMAL                
691 #define FILL_6_OTHER FILL_6_NORMAL                
692 #define FILL_7_OTHER FILL_7_NORMAL                
693                                                   
694 #endif /* !(_SPARC64_TTABLE_H) */                 
695                                                   

~ [ 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