xref: /onnv-gate/usr/src/lib/libbc/sparc/inc/SYS.h (revision 0:68f95e015346)
1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate  * CDDL HEADER START
3*0Sstevel@tonic-gate  *
4*0Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*0Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*0Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*0Sstevel@tonic-gate  * with the License.
8*0Sstevel@tonic-gate  *
9*0Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*0Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*0Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*0Sstevel@tonic-gate  * and limitations under the License.
13*0Sstevel@tonic-gate  *
14*0Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*0Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*0Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*0Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*0Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*0Sstevel@tonic-gate  *
20*0Sstevel@tonic-gate  * CDDL HEADER END
21*0Sstevel@tonic-gate  */
22*0Sstevel@tonic-gate !
23*0Sstevel@tonic-gate !	"@(#)SYS.h 1.14 88/02/08"
24*0Sstevel@tonic-gate !       Copyright (c) 1986, 1996 by Sun Microsystems, Inc.
25*0Sstevel@tonic-gate !	All rights reserved.
26*0Sstevel@tonic-gate !
27*0Sstevel@tonic-gate 
28*0Sstevel@tonic-gate #include <sys/syscall.h>
29*0Sstevel@tonic-gate #include <machine/asm_linkage.h>
30*0Sstevel@tonic-gate #include "PIC.h"
31*0Sstevel@tonic-gate 
32*0Sstevel@tonic-gate #define SV_ERESTART	91	/* ERESTART is returned by the kernel for
33*0Sstevel@tonic-gate 				   restartable system calls */
34*0Sstevel@tonic-gate 
35*0Sstevel@tonic-gate #define WINDOWSIZE	(16*4)
36*0Sstevel@tonic-gate 
37*0Sstevel@tonic-gate 	.global	.cerror
38*0Sstevel@tonic-gate 
39*0Sstevel@tonic-gate #define SYSCALL(x) \
40*0Sstevel@tonic-gate 	ENTRY(x); \
41*0Sstevel@tonic-gate 	mov	SYS_/**/x, %g1; \
42*0Sstevel@tonic-gate 	t	8; \
43*0Sstevel@tonic-gate 	CERROR(o5)
44*0Sstevel@tonic-gate 
45*0Sstevel@tonic-gate #define BSDSYSCALL(x) \
46*0Sstevel@tonic-gate 	ENTRY(_/**/x); \
47*0Sstevel@tonic-gate 	mov	SYS_/**/x, %g1; \
48*0Sstevel@tonic-gate 	t	8; \
49*0Sstevel@tonic-gate 	CERROR(o5)
50*0Sstevel@tonic-gate 
51*0Sstevel@tonic-gate /*
52*0Sstevel@tonic-gate  * SYSREENTRY provides the entry sequence for restartable system calls.
53*0Sstevel@tonic-gate  */
54*0Sstevel@tonic-gate #define SYSREENTRY(x)	\
55*0Sstevel@tonic-gate 	ENTRY(x);	\
56*0Sstevel@tonic-gate 	st      %o0,[%sp+68]; \
57*0Sstevel@tonic-gate .restart_/**/x:
58*0Sstevel@tonic-gate 
59*0Sstevel@tonic-gate #define PSEUDO(x, y) \
60*0Sstevel@tonic-gate 	ENTRY(x); \
61*0Sstevel@tonic-gate 	mov	SYS_/**/y, %g1; \
62*0Sstevel@tonic-gate 	t	8;
63*0Sstevel@tonic-gate 
64*0Sstevel@tonic-gate /*
65*0Sstevel@tonic-gate  * SYSCALL_RESTART provides the most common restartable system call sequence.
66*0Sstevel@tonic-gate  */
67*0Sstevel@tonic-gate #define SYSCALL_RESTART(x) \
68*0Sstevel@tonic-gate 	SYSREENTRY(x); \
69*0Sstevel@tonic-gate 	mov	SYS_/**/x, %g1; \
70*0Sstevel@tonic-gate 	t	8; \
71*0Sstevel@tonic-gate 	SYSRESTART(.restart_/**/x)
72*0Sstevel@tonic-gate 
73*0Sstevel@tonic-gate /*
74*0Sstevel@tonic-gate  * SYSREENTRY provides the entry sequence for restartable system calls.
75*0Sstevel@tonic-gate  */
76*0Sstevel@tonic-gate #define SYSREENTRY(x) \
77*0Sstevel@tonic-gate 	ENTRY(x); \
78*0Sstevel@tonic-gate 	st      %o0,[%sp+68]; \
79*0Sstevel@tonic-gate .restart_/**/x:
80*0Sstevel@tonic-gate 
81*0Sstevel@tonic-gate /*
82*0Sstevel@tonic-gate  * SYSRESTART provides the error handling sequence for restartable
83*0Sstevel@tonic-gate  * system calls.
84*0Sstevel@tonic-gate  */
85*0Sstevel@tonic-gate #ifdef PIC
86*0Sstevel@tonic-gate #define SYSRESTART(x) \
87*0Sstevel@tonic-gate 	bcc	noerr; \
88*0Sstevel@tonic-gate 	cmp	%o0, SV_ERESTART; \
89*0Sstevel@tonic-gate 	be,a	x; \
90*0Sstevel@tonic-gate 	ld	 [%sp+68], %o0; \
91*0Sstevel@tonic-gate 	PIC_SETUP(o5); \
92*0Sstevel@tonic-gate 	ld	[%o5 + .cerror], %o5; \
93*0Sstevel@tonic-gate 	jmp	%o5; \
94*0Sstevel@tonic-gate 	.empty; \
95*0Sstevel@tonic-gate noerr:	nop	;
96*0Sstevel@tonic-gate #else
97*0Sstevel@tonic-gate #define SYSRESTART(x) \
98*0Sstevel@tonic-gate 	bcc	noerr; \
99*0Sstevel@tonic-gate 	cmp	%o0, SV_ERESTART; \
100*0Sstevel@tonic-gate 	be,a	x; \
101*0Sstevel@tonic-gate 	ld	[%sp+68], %o0; \
102*0Sstevel@tonic-gate 	ba	.cerror; \
103*0Sstevel@tonic-gate 	.empty; \
104*0Sstevel@tonic-gate noerr:	nop	;
105*0Sstevel@tonic-gate #endif
106*0Sstevel@tonic-gate 
107*0Sstevel@tonic-gate #define RET	retl; nop;
108*0Sstevel@tonic-gate 
109*0Sstevel@tonic-gate #ifdef PIC
110*0Sstevel@tonic-gate #define CERROR(free_reg) \
111*0Sstevel@tonic-gate 	bcc	noerr; \
112*0Sstevel@tonic-gate 	PIC_SETUP(free_reg); \
113*0Sstevel@tonic-gate 	.empty;	\
114*0Sstevel@tonic-gate 	ld	[%free_reg+ .cerror],%free_reg; \
115*0Sstevel@tonic-gate 	jmp	%free_reg; \
116*0Sstevel@tonic-gate 	.empty;	\
117*0Sstevel@tonic-gate noerr:	nop;
118*0Sstevel@tonic-gate #else
119*0Sstevel@tonic-gate #define CERROR(free_reg) \
120*0Sstevel@tonic-gate 	bcc 	noerr; \
121*0Sstevel@tonic-gate 	.empty; \
122*0Sstevel@tonic-gate 	sethi	%hi(.cerror), %free_reg;\
123*0Sstevel@tonic-gate 	or	%free_reg, %lo(.cerror), %free_reg;\
124*0Sstevel@tonic-gate 	jmp	%free_reg;\
125*0Sstevel@tonic-gate 	.empty;\
126*0Sstevel@tonic-gate noerr: nop;
127*0Sstevel@tonic-gate #endif
128