summaryrefslogtreecommitdiff
path: root/sys/compat/linux/common/linux_misc.h
blob: 9ead88801ef8d8916db0eb35764ba1b5f383d260 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/*	$NetBSD: linux_misc.h,v 1.26 2020/05/03 01:06:56 thorpej Exp $	*/

/*-
 * Copyright (c) 1998 The NetBSD Foundation, Inc.
 * All rights reserved.
 *
 * This code is derived from software contributed to The NetBSD Foundation
 * by Eric Haszlakiewicz.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef _LINUX_MISC_H
#define _LINUX_MISC_H

/*
 * Options passed to the Linux wait4() system call.
 */
#define LINUX_WAIT4_WNOHANG	0x00000001
#define LINUX_WAIT4_WUNTRACED	0x00000002
#define LINUX_WAIT4_WCONTINUED	0x00000008
#define LINUX_WAIT4_WNOTHREAD	0x20000000
#define LINUX_WAIT4_WALL	0x40000000
#define LINUX_WAIT4_WCLONE	0x80000000

#define LINUX_WAIT4_KNOWNFLAGS (LINUX_WAIT4_WNOHANG | \
                                LINUX_WAIT4_WUNTRACED | \
                                LINUX_WAIT4_WCONTINUED | \
                                LINUX_WAIT4_WNOTHREAD | \
                                LINUX_WAIT4_WALL | \
                                LINUX_WAIT4_WCLONE)

/* This looks very unportable to me, but this is how Linux defines it. */
struct linux_sysinfo {
	long uptime;
	unsigned long loads[3];
#define LINUX_SYSINFO_LOADS_SCALE 65536
	unsigned long totalram;
	unsigned long freeram;
	unsigned long sharedram;
	unsigned long bufferram;
	unsigned long totalswap;
	unsigned long freeswap;
	unsigned short procs;
	unsigned long totalbig;
	unsigned long freebig;
	unsigned int mem_unit;
	char _f[20-2*sizeof(long)-sizeof(int)];
};

#define	LINUX_RLIMIT_CPU	0
#define	LINUX_RLIMIT_FSIZE	1
#define	LINUX_RLIMIT_DATA	2
#define	LINUX_RLIMIT_STACK	3
#define	LINUX_RLIMIT_CORE	4
#define	LINUX_RLIMIT_RSS	5
#define	LINUX_RLIMIT_NPROC	6
#define	LINUX_RLIMIT_NOFILE	7
#define	LINUX_RLIMIT_MEMLOCK	8
#define	LINUX_RLIMIT_AS		9
#define	LINUX_RLIMIT_LOCKS	10
#ifdef __mips__  /* XXX only mips32. On mips64, it's ~0ul */
#define	LINUX_RLIM_INFINITY	0x7fffffffUL
#define	LINUX32_RLIM_INFINITY	0x7fffffffU
#else
#define	LINUX_RLIM_INFINITY	~0ul
#define	LINUX32_RLIM_INFINITY	~0u
#endif


/* When we don't know what to do, let it believe it is local */
#define	LINUX_DEFAULT_SUPER_MAGIC	LINUX_EXT2_SUPER_MAGIC

#define	LINUX_ADFS_SUPER_MAGIC		0x0000adf5
#define	LINUX_AFFS_SUPER_MAGIC		0x0000adff
#define	LINUX_CODA_SUPER_MAGIC		0x73757245
#define	LINUX_COH_SUPER_MAGIC		(LINUX_SYSV_MAGIC_BASE + 4)
#define	LINUX_DEVFS_SUPER_MAGIC		0x00001373
#define	LINUX_EFS_SUPER_MAGIC		0x00414A53
#define	LINUX_EXT2_SUPER_MAGIC		0x0000EF53
#define	LINUX_HPFS_SUPER_MAGIC		0xf995e849
#define	LINUX_ISOFS_SUPER_MAGIC		0x00009660
#define	LINUX_MINIX2_SUPER_MAGIC	0x00002468
#define	LINUX_MINIX2_SUPER_MAGIC2	0x00002478
#define	LINUX_MINIX_SUPER_MAGIC		0x0000137F
#define	LINUX_MINIX_SUPER_MAGIC2	0x0000138F
#define	LINUX_MSDOS_SUPER_MAGIC		0x00004d44
#define	LINUX_NCP_SUPER_MAGIC		0x0000564c
#define	LINUX_NFS_SUPER_MAGIC		0x00006969
#define	LINUX_OPENPROM_SUPER_MAGIC	0x00009fa1
#define	LINUX_PROC_SUPER_MAGIC		0x00009fa0
#define	LINUX_QNX4_SUPER_MAGIC		0x0000002f
#define	LINUX_REISERFS_SUPER_MAGIC	0x52654973
#define	LINUX_SMB_SUPER_MAGIC		0x0000517B
#define	LINUX_SYSV2_SUPER_MAGIC		(LINUX_SYSV_MAGIC_BASE + 3)
#define	LINUX_SYSV4_SUPER_MAGIC		(LINUX_SYSV_MAGIC_BASE + 2)
#define	LINUX_SYSV_MAGIC_BASE		0x012FF7B3
#define	LINUX_TMPFS_SUPER_MAGIC		0x01021994
#define	LINUX_USBDEVICE_SUPER_MAGIC	0x00009fa2
#define	LINUX_DEVPTS_SUPER_MAGIC	0x00001cd1
#define	LINUX_XENIX_SUPER_MAGIC		(LINUX_SYSV_MAGIC_BASE + 1)

struct linux_mnttypes {
	const char *mty_bsd;
	int mty_linux;
};
extern const struct linux_mnttypes linux_fstypes[];
extern const int linux_fstypes_cnt;

/* Personality types. */
#define LINUX_PER_QUERY		0xffffffff
#define LINUX_PER_LINUX		0x00
#define LINUX_PER_LINUX32	0x08
#define LINUX_PER_MASK		0xff

/* Personality flags. */
#define LINUX_PER_ADDR_NO_RANDOMIZE	0x00040000

/* 
 * Convert POSIX_FADV_* constants from Linux to NetBSD
 * (it's f(x)=x everywhere except S390)
 */
#define linux_to_bsd_posix_fadv(advice) (advice)

#ifdef _KERNEL
__BEGIN_DECLS
int bsd_to_linux_wstat(int);
int linux_select1(struct lwp *, register_t *, int, fd_set *, fd_set *,
		       fd_set *, struct linux_timeval *);
int linux_do_sys_utimensat(struct lwp *, int, const char *,
    struct timespec *, int, register_t *);
int linux_do_futex(int *, int, int, struct timespec *, int *, int, int,
    register_t *);
__END_DECLS
#endif /* !_KERNEL */

#endif /* !_LINUX_MISC_H */