Merge branch 'master' of /pub/scm/linux/kernel/git/torvalds/linux-2.6
[linux-2.6] / arch / sparc / kernel / sclow.S
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  */
8
9 #include <asm/ptrace.h>
10 #include <asm/asm-offsets.h>
11 #include <asm/errno.h>
12 #include <asm/winmacro.h>
13 #include <asm/thread_info.h>
14 #include <asm/psr.h>
15 #include <asm/page.h>
16
17 #define CC_AND_RETT  \
18         set     PSR_C, %l4; \
19         andn    %l0, %l4, %l4; \
20         wr      %l4, 0x0, %psr; \
21         nop; nop; nop; \
22         jmp     %l2; \
23         rett    %l2 + 4;
24
25 #define SC_AND_RETT  \
26         set     PSR_C, %l4; \
27         or      %l0, %l4, %l4; \
28         wr      %l4, 0x0, %psr; \
29         nop; nop; nop; \
30         jmp     %l2; \
31         rett    %l2 + 4;
32
33 #define LABEL(func)  func##_low
34
35         .globl  LABEL(sunosnop)
36 LABEL(sunosnop):
37         CC_AND_RETT
38
39 #if (ASIZ_task_uid == 2 && ASIZ_task_euid == 2)
40         .globl  LABEL(sunosgetuid)
41 LABEL(sunosgetuid):
42         LOAD_CURRENT(l4, l5)
43         ld      [%l4 + TI_TASK], %l4
44         lduh    [%l4 + AOFF_task_uid], %i0
45         lduh    [%l4 + AOFF_task_euid], %i1
46         CC_AND_RETT
47 #endif
48
49 #if (ASIZ_task_gid == 2 && ASIZ_task_egid == 2)
50         .globl  LABEL(sunosgetgid)
51 LABEL(sunosgetgid):
52         LOAD_CURRENT(l4, l5)
53         ld      [%l4 + TI_TASK], %l4
54         lduh    [%l4 + AOFF_task_gid], %i0
55         lduh    [%l4 + AOFF_task_egid], %i1
56         CC_AND_RETT
57 #endif
58
59         .globl  LABEL(sunosmctl)
60 LABEL(sunosmctl):
61         mov     0, %i0
62         CC_AND_RETT
63
64         .globl  LABEL(sunosgdtsize)
65 LABEL(sunosgdtsize):    
66         mov     256, %i0
67         CC_AND_RETT
68
69         .globl  LABEL(getpagesize)
70 LABEL(getpagesize):
71         set     PAGE_SIZE, %i0
72         CC_AND_RETT
73
74         /* XXX sys_nice() XXX */
75         /* XXX sys_setpriority() XXX */
76         /* XXX sys_getpriority() XXX */
77         /* XXX sys_setregid() XXX */
78         /* XXX sys_setgid() XXX */
79         /* XXX sys_setreuid() XXX */
80         /* XXX sys_setuid() XXX */
81         /* XXX sys_setfsuid() XXX */
82         /* XXX sys_setfsgid() XXX */
83         /* XXX sys_setpgid() XXX */
84         /* XXX sys_getpgid() XXX */
85         /* XXX sys_setsid() XXX */
86         /* XXX sys_getsid() XXX */