1e71ca95cSGerald Jelinek /*
2e71ca95cSGerald Jelinek  * CDDL HEADER START
3e71ca95cSGerald Jelinek  *
4e71ca95cSGerald Jelinek  * The contents of this file are subject to the terms of the
5e71ca95cSGerald Jelinek  * Common Development and Distribution License (the "License").
6e71ca95cSGerald Jelinek  * You may not use this file except in compliance with the License.
7e71ca95cSGerald Jelinek  *
8e71ca95cSGerald Jelinek  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9e71ca95cSGerald Jelinek  * or http://www.opensolaris.org/os/licensing.
10e71ca95cSGerald Jelinek  * See the License for the specific language governing permissions
11e71ca95cSGerald Jelinek  * and limitations under the License.
12e71ca95cSGerald Jelinek  *
13e71ca95cSGerald Jelinek  * When distributing Covered Code, include this CDDL HEADER in each
14e71ca95cSGerald Jelinek  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15e71ca95cSGerald Jelinek  * If applicable, add the following below this CDDL HEADER, with the
16e71ca95cSGerald Jelinek  * fields enclosed by brackets "[]" replaced with your own identifying
17e71ca95cSGerald Jelinek  * information: Portions Copyright [yyyy] [name of copyright owner]
18e71ca95cSGerald Jelinek  *
19e71ca95cSGerald Jelinek  * CDDL HEADER END
20e71ca95cSGerald Jelinek  */
21794f0adbSRoger A. Faulkner 
22e71ca95cSGerald Jelinek /*
23*b49b27dcSTheo Schlossnagle  * Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved.
2480e2ca85S  * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
25e71ca95cSGerald Jelinek  */
26e71ca95cSGerald Jelinek 
27e71ca95cSGerald Jelinek #ifndef _S10_BRAND_H
28e71ca95cSGerald Jelinek #define	_S10_BRAND_H
29e71ca95cSGerald Jelinek 
30e71ca95cSGerald Jelinek #ifdef	__cplusplus
31e71ca95cSGerald Jelinek extern "C" {
32e71ca95cSGerald Jelinek #endif
33e71ca95cSGerald Jelinek 
3480e2ca85S #include <sys/brand.h>
35e71ca95cSGerald Jelinek 
36e71ca95cSGerald Jelinek #define	S10_BRANDNAME		"solaris10"
37e71ca95cSGerald Jelinek 
38e71ca95cSGerald Jelinek #define	S10_VERSION_1		1
39e71ca95cSGerald Jelinek #define	S10_VERSION		S10_VERSION_1
40e71ca95cSGerald Jelinek 
41e71ca95cSGerald Jelinek #define	S10_LIB_NAME		"s10_brand.so.1"
42e71ca95cSGerald Jelinek #define	S10_LINKER_NAME		"ld.so.1"
43e71ca95cSGerald Jelinek 
4480e2ca85S #define	S10_LIB32		BRAND_NATIVE_DIR "usr/lib/" S10_LIB_NAME
45e71ca95cSGerald Jelinek #define	S10_LINKER32		"/lib/" S10_LINKER_NAME
46e71ca95cSGerald Jelinek 
4780e2ca85S #define	S10_LIB64		BRAND_NATIVE_DIR "usr/lib/64/" S10_LIB_NAME
48e71ca95cSGerald Jelinek #define	S10_LINKER64		"/lib/64/" S10_LINKER_NAME
49e71ca95cSGerald Jelinek 
50e71ca95cSGerald Jelinek #if defined(_LP64)
51e71ca95cSGerald Jelinek #define	S10_LIB		S10_LIB64
52e71ca95cSGerald Jelinek #define	S10_LINKER	S10_LINKER64
53e71ca95cSGerald Jelinek #else /* !_LP64 */
54e71ca95cSGerald Jelinek #define	S10_LIB		S10_LIB32
55e71ca95cSGerald Jelinek #define	S10_LINKER	S10_LINKER32
56e71ca95cSGerald Jelinek #endif /* !_LP64 */
57e71ca95cSGerald Jelinek 
58eb9dbf0cSRoger A. Faulkner /*
598f798d3aSRoger A. Faulkner  * Solaris 10 value of _SIGRTMIN, _SIGRTMAX, MAXSIG, NSIG
60eb9dbf0cSRoger A. Faulkner  */
618f798d3aSRoger A. Faulkner #define	S10_SIGRTMIN	41
628f798d3aSRoger A. Faulkner #define	S10_SIGRTMAX	48
638f798d3aSRoger A. Faulkner #define	S10_MAXSIG	48
64eb9dbf0cSRoger A. Faulkner #define	S10_NSIG	49
65eb9dbf0cSRoger A. Faulkner 
66e71ca95cSGerald Jelinek /*
67e71ca95cSGerald Jelinek  * Brand system call subcodes.  0-127 are reserved for generic subcodes.
68e71ca95cSGerald Jelinek  */
69e71ca95cSGerald Jelinek #define	B_S10_PIDINFO		128
70e71ca95cSGerald Jelinek #define	B_S10_NATIVE		130
71e71ca95cSGerald Jelinek #define	B_S10_FSREGCORRECTION	131
728b4cf837Sjv #define	B_S10_ISFDXATTRDIR	132
73e71ca95cSGerald Jelinek 
74ad601a05Sjv /*
75ad601a05Sjv  * Versioning flags
76ad601a05Sjv  *
77ad601a05Sjv  * The first enum value must be zero.  Place new enum values at the end of the
78ad601a05Sjv  * list but before S10_NUM_EMUL_FEATURES, which must always come last.
79ad601a05Sjv  * Enum values should start with "S10_FEATURE_" and be named after the
80ad601a05Sjv  * fixes/backports that they represent.  For example, an enum value representing
81ad601a05Sjv  * a backport that changes a MNTFS ioctl could be named
82ad601a05Sjv  * "S10_FEATURE_ALTERED_MNTFS_IOCTL".
83ad601a05Sjv  */
84ad601a05Sjv enum s10_emulated_features {
85c5aee804SRobert Harris 	S10_FEATURE_ALTERED_MNTFS_IOCTL,
86fcdeb91bSjv 	S10_FEATURE_U9_ZFS_IOCTL,	/* S10u9 ZFS ioctl changes */
87ad601a05Sjv 	S10_NUM_EMUL_FEATURES		/* This must be the last entry! */
88ad601a05Sjv };
89ad601a05Sjv 
90ad601a05Sjv /*
91ad601a05Sjv  * This string constant represents the path of the Solaris 10 directory
92ad601a05Sjv  * containing emulation feature files.
93ad601a05Sjv  */
94ad601a05Sjv #define	S10_REQ_EMULATION_DIR	"/usr/lib/brand/solaris10"
95ad601a05Sjv 
96e71ca95cSGerald Jelinek /*
97e71ca95cSGerald Jelinek  * s10_brand_syscall_callback_common() needs to save 4 local registers so it
98e71ca95cSGerald Jelinek  * can free them up for its own use.
99e71ca95cSGerald Jelinek  */
100e71ca95cSGerald Jelinek #define	S10_CPU_REG_SAVE_SIZE	(sizeof (ulong_t) * 4)
101e71ca95cSGerald Jelinek 
102e71ca95cSGerald Jelinek /*
1038fd04b83SRoger A. Faulkner  * S10 system call codes for S10 traps that have been removed or reassigned,
1048fd04b83SRoger A. Faulkner  * or that are to be removed or reassigned after the dtrace syscall provider
1058fd04b83SRoger A. Faulkner  * has been reengineered to deal properly with syscall::open (for example).
106e71ca95cSGerald Jelinek  */
1078fd04b83SRoger A. Faulkner #define	S10_SYS_forkall		2
1088fd04b83SRoger A. Faulkner #define	S10_SYS_open		5
1098fd04b83SRoger A. Faulkner #define	S10_SYS_wait		7
1108fd04b83SRoger A. Faulkner #define	S10_SYS_creat		8
111794f0adbSRoger A. Faulkner #define	S10_SYS_link		9
1128fd04b83SRoger A. Faulkner #define	S10_SYS_unlink		10
1138fd04b83SRoger A. Faulkner #define	S10_SYS_exec		11
114794f0adbSRoger A. Faulkner #define	S10_SYS_mknod		14
115794f0adbSRoger A. Faulkner #define	S10_SYS_chmod		15
1168fd04b83SRoger A. Faulkner #define	S10_SYS_chown		16
1178fd04b83SRoger A. Faulkner #define	S10_SYS_stat		18
1188fd04b83SRoger A. Faulkner #define	S10_SYS_umount		22
1198fd04b83SRoger A. Faulkner #define	S10_SYS_fstat		28
1208fd04b83SRoger A. Faulkner #define	S10_SYS_utime		30
1218fd04b83SRoger A. Faulkner #define	S10_SYS_access		33
1228fd04b83SRoger A. Faulkner #define	S10_SYS_dup		41
123*b49b27dcSTheo Schlossnagle #define	S10_SYS_pipe		42
124e71ca95cSGerald Jelinek #define	S10_SYS_issetugid	75
1258fd04b83SRoger A. Faulkner #define	S10_SYS_fsat		76
1268fd04b83SRoger A. Faulkner #define	S10_SYS_rmdir		79
127794f0adbSRoger A. Faulkner #define	S10_SYS_mkdir		80
1288fd04b83SRoger A. Faulkner #define	S10_SYS_poll		87
1298fd04b83SRoger A. Faulkner #define	S10_SYS_lstat		88
130794f0adbSRoger A. Faulkner #define	S10_SYS_symlink		89
131794f0adbSRoger A. Faulkner #define	S10_SYS_readlink	90
132794f0adbSRoger A. Faulkner #define	S10_SYS_fchmod		93
1338fd04b83SRoger A. Faulkner #define	S10_SYS_fchown		94
1348fd04b83SRoger A. Faulkner #define	S10_SYS_xstat		123
1358fd04b83SRoger A. Faulkner #define	S10_SYS_lxstat		124
1368fd04b83SRoger A. Faulkner #define	S10_SYS_fxstat		125
1378fd04b83SRoger A. Faulkner #define	S10_SYS_xmknod		126
1388fd04b83SRoger A. Faulkner #define	S10_SYS_lchown		130
1398fd04b83SRoger A. Faulkner #define	S10_SYS_rename		134
1408fd04b83SRoger A. Faulkner #define	S10_SYS_fork1		143
1418fd04b83SRoger A. Faulkner #define	S10_SYS_lwp_sema_wait	147
1428fd04b83SRoger A. Faulkner #define	S10_SYS_utimes		154
1438fd04b83SRoger A. Faulkner #define	S10_SYS_lwp_mutex_lock	169
1448fd04b83SRoger A. Faulkner #define	S10_SYS_stat64		215
1458fd04b83SRoger A. Faulkner #define	S10_SYS_lstat64		216
1468fd04b83SRoger A. Faulkner #define	S10_SYS_fstat64		217
1478fd04b83SRoger A. Faulkner #define	S10_SYS_creat64		224
1488fd04b83SRoger A. Faulkner #define	S10_SYS_open64		225
149*b49b27dcSTheo Schlossnagle #define	S10_SYS_so_socket	230
150*b49b27dcSTheo Schlossnagle #define	S10_SYS_accept		234
151e71ca95cSGerald Jelinek 
152e71ca95cSGerald Jelinek /*
153ad601a05Sjv  * solaris10-brand-specific attributes
154ad601a05Sjv  * These must start at ZONE_ATTR_BRAND_ATTRS.
155e71ca95cSGerald Jelinek  */
156ad601a05Sjv #define	S10_EMUL_BITMAP		ZONE_ATTR_BRAND_ATTRS
157e71ca95cSGerald Jelinek 
158ad601a05Sjv /*
159ad601a05Sjv  * s10_emul_bitmap represents an emulation feature bitmap.  Each constant
160ad601a05Sjv  * in s10_emulated_features defines a bit index in this bitmap.  If a bit is
161ad601a05Sjv  * set, then the feature associated with the s10_emulated_features constant
162ad601a05Sjv  * whose value is the bit's index is present in the associated zone's hosted
163ad601a05Sjv  * Solaris 10 environment.
164ad601a05Sjv  *
165ad601a05Sjv  * NOTE: There must be at least one byte in the bitmap.
166ad601a05Sjv  *
167ad601a05Sjv  * We don't use the bitmap macros provided by usr/src/uts/common/sys/bitmap.h
168ad601a05Sjv  * because they operate on ulong_t arrays.  The size of a ulong_t depends on
169ad601a05Sjv  * the data model in which the code that declares the ulong_t is compiled:
170ad601a05Sjv  * four bytes on 32-bit architectures and eight bytes 64-bit architectures.
171ad601a05Sjv  * If the kernel is 64-bit and a 32-bit process executes in a solaris10-
172ad601a05Sjv  * branded zone, then if the process' emulation library, which is 32-bit,
173ad601a05Sjv  * queries the kernel for the zone's emulation bitmap, then the kernel will
174ad601a05Sjv  * refuse because the library will request a bitmap that's half as big
175ad601a05Sjv  * as the bitmap the kernel provides.  The 32-bit emulation library would need
176ad601a05Sjv  * its own macros to define and operate on bitmaps with 64-bit array elements.
177ad601a05Sjv  * Thus using the sys/bitmap.h macros is probably more troublesome than
178ad601a05Sjv  * defining and using our own constants and macros for bitmap manipulations.
179ad601a05Sjv  */
180ad601a05Sjv typedef uint8_t s10_emul_bitmap_t[(S10_NUM_EMUL_FEATURES >> 3) + 1];
181ad601a05Sjv 
182e71ca95cSGerald Jelinek #if defined(_KERNEL)
183e71ca95cSGerald Jelinek 
184e71ca95cSGerald Jelinek /* brand specific data */
185e71ca95cSGerald Jelinek typedef struct s10_zone_data {
186ad601a05Sjv 	/*
187ad601a05Sjv 	 * emul_bitmap specifies the features that are present in the
188ad601a05Sjv 	 * associated zone.
189ad601a05Sjv 	 */
190ad601a05Sjv 	s10_emul_bitmap_t	emul_bitmap;
191e71ca95cSGerald Jelinek } s10_zone_data_t;
192e71ca95cSGerald Jelinek 
193e71ca95cSGerald Jelinek void s10_brand_syscall_callback(void);
194e71ca95cSGerald Jelinek void s10_brand_syscall32_callback(void);
195e71ca95cSGerald Jelinek 
196e71ca95cSGerald Jelinek #if !defined(sparc)
197e71ca95cSGerald Jelinek void s10_brand_sysenter_callback(void);
198e71ca95cSGerald Jelinek #endif /* !sparc */
199e71ca95cSGerald Jelinek 
200e71ca95cSGerald Jelinek #if defined(__amd64)
201e71ca95cSGerald Jelinek void s10_brand_int91_callback(void);
202e71ca95cSGerald Jelinek #endif /* __amd64 */
203e71ca95cSGerald Jelinek #endif /* _KERNEL */
204e71ca95cSGerald Jelinek 
205e71ca95cSGerald Jelinek #ifdef	__cplusplus
206e71ca95cSGerald Jelinek }
207e71ca95cSGerald Jelinek #endif
208e71ca95cSGerald Jelinek 
209e71ca95cSGerald Jelinek #endif	/* _S10_BRAND_H */
210