Import 2.3.18pre1
[davej-history.git] / arch / sparc / kernel / sclow.S
blob4da88bd0e0593ae4207110a151edf78973a3f54d
1 /* sclow.S: Low level special syscall handling.
2  *          Basically these are cases where we can completely
3  *          handle the system call without saving any state
4  *          because we know that the process will not sleep.
5  *
6  * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
7  */
9 #include <asm/cprefix.h>
10 #include <asm/ptrace.h>
11 #include <asm/errno.h>
12 #include <asm/winmacro.h>
13 #include <asm/psr.h>
14 #include <asm/page.h>
16 #define CC_AND_RETT  \
17         set     PSR_C, %l4; \
18         andn    %l0, %l4, %l4; \
19         wr      %l4, 0x0, %psr; \
20         nop; nop; nop; \
21         jmp     %l2; \
22         rett    %l2 + 4;
24 #define SC_AND_RETT  \
25         set     PSR_C, %l4; \
26         or      %l0, %l4, %l4; \
27         wr      %l4, 0x0, %psr; \
28         nop; nop; nop; \
29         jmp     %l2; \
30         rett    %l2 + 4;
32 #define LABEL(func)  CONCAT(func, _low)
34         .globl  LABEL(sunosnop)
35 LABEL(sunosnop):
36         CC_AND_RETT
38 #if 0
39 /* Not SMP safe */
40         .globl  LABEL(sunosgetpid)
41 LABEL(sunosgetpid):
42         LOAD_CURRENT(l4, l5)
43         ld      [%l4 + AOFF_task_pid], %i0
44         ld      [%l4 + AOFF_task_p_opptr], %l5
45         ld      [%l5 + AOFF_task_pid], %i1
46         CC_AND_RETT
47 #endif
49 #if (ASIZ_task_uid == 2 && ASIZ_task_euid == 2)
50         .globl  LABEL(sunosgetuid)
51 LABEL(sunosgetuid):
52         LOAD_CURRENT(l4, l5)
53         lduh    [%l4 + AOFF_task_uid], %i0
54         lduh    [%l4 + AOFF_task_euid], %i1
55         CC_AND_RETT
56 #endif
58 #if (ASIZ_task_gid == 2 && ASIZ_task_egid == 2)
59         .globl  LABEL(sunosgetgid)
60 LABEL(sunosgetgid):
61         LOAD_CURRENT(l4, l5)
62         lduh    [%l4 + AOFF_task_gid], %i0
63         lduh    [%l4 + AOFF_task_egid], %i1
64         CC_AND_RETT
65 #endif
67         .globl  LABEL(sunosmctl)
68 LABEL(sunosmctl):
69         mov     0, %i0
70         CC_AND_RETT
72         .globl  LABEL(sunosgdtsize)
73 LABEL(sunosgdtsize):    
74         mov     256, %i0
75         CC_AND_RETT
77         .globl  LABEL(sunossblock)
78 LABEL(sunossblock):
79         LOAD_CURRENT(l4, l5)
80         set     -65793, %l5
81         and     %i0, %l5, %l5
82         ld      [%l4 + AOFF_task_blocked], %i0
83         or      %i0, %l5, %l5
84         st      %l5, [%l4 + AOFF_task_blocked]
85         CC_AND_RETT
87         .globl  LABEL(sunossmask)
88 LABEL(sunossmask):
89         LOAD_CURRENT(l4, l5)
90         set     -65793, %l5
91         and     %i0, %l5, %l5
92         ld      [%l4 + AOFF_task_blocked], %i0
93         st      %l5, [%l4 + AOFF_task_blocked]
94         CC_AND_RETT
96         .globl  LABEL(getpagesize)
97 LABEL(getpagesize):
98         set     PAGE_SIZE, %i0
99         CC_AND_RETT
101         /* XXX sys_nice() XXX */
102         /* XXX sys_setpriority() XXX */
103         /* XXX sys_getpriority() XXX */
104         /* XXX sys_setregid() XXX */
105         /* XXX sys_setgid() XXX */
106         /* XXX sys_setreuid() XXX */
107         /* XXX sys_setuid() XXX */
108         /* XXX sys_setfsuid() XXX */
109         /* XXX sys_setfsgid() XXX */
110         /* XXX sys_setpgid() XXX */
111         /* XXX sys_getpgid() XXX */
112         /* XXX sys_setsid() XXX */
113         /* XXX sys_getsid() XXX */