xref: /freebsd-src/sys/compat/linux/linux_file.h (revision 9c7b1bf27122f975ea70c81931d48b751f8a1bfa)
148b05c3fSKonstantin Belousov /*-
24d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
37f2d13d6SPedro F. Giffuni  *
448b05c3fSKonstantin Belousov  * Copyright (c) 2007 Roman Divacky
548b05c3fSKonstantin Belousov  * All rights reserved.
648b05c3fSKonstantin Belousov  *
748b05c3fSKonstantin Belousov  * Redistribution and use in source and binary forms, with or without
848b05c3fSKonstantin Belousov  * modification, are permitted provided that the following conditions
948b05c3fSKonstantin Belousov  * are met:
1048b05c3fSKonstantin Belousov  * 1. Redistributions of source code must retain the above copyright
1148b05c3fSKonstantin Belousov  *    notice, this list of conditions and the following disclaimer.
1248b05c3fSKonstantin Belousov  * 2. Redistributions in binary form must reproduce the above copyright
1348b05c3fSKonstantin Belousov  *    notice, this list of conditions and the following disclaimer in the
1448b05c3fSKonstantin Belousov  *    documentation and/or other materials provided with the distribution.
1548b05c3fSKonstantin Belousov  *
1648b05c3fSKonstantin Belousov  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1748b05c3fSKonstantin Belousov  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1848b05c3fSKonstantin Belousov  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1948b05c3fSKonstantin Belousov  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2048b05c3fSKonstantin Belousov  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2148b05c3fSKonstantin Belousov  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2248b05c3fSKonstantin Belousov  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2348b05c3fSKonstantin Belousov  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2448b05c3fSKonstantin Belousov  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2548b05c3fSKonstantin Belousov  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2648b05c3fSKonstantin Belousov  * SUCH DAMAGE.
2748b05c3fSKonstantin Belousov  */
2848b05c3fSKonstantin Belousov 
2948b05c3fSKonstantin Belousov #ifndef _LINUX_FILE_H_
3048b05c3fSKonstantin Belousov #define	_LINUX_FILE_H_
3148b05c3fSKonstantin Belousov 
3248b05c3fSKonstantin Belousov #define	LINUX_AT_FDCWD			-100
3348b05c3fSKonstantin Belousov #define	LINUX_AT_SYMLINK_NOFOLLOW	0x100
34767a3264SEd Schouten #define	LINUX_AT_EACCESS		0x200
3548b05c3fSKonstantin Belousov #define	LINUX_AT_REMOVEDIR		0x200
36767a3264SEd Schouten #define	LINUX_AT_SYMLINK_FOLLOW		0x400
37ff39d74aSDmitry Chagin #define	LINUX_AT_NO_AUTOMOUNT		0x800
38ff39d74aSDmitry Chagin 		/*
39ff39d74aSDmitry Chagin 		 * Specific to Linux AT_NO_AUTOMOUNT flag tells the kernel to
40ff39d74aSDmitry Chagin 		 * not automount the terminal component of pathname if it is a
41ff39d74aSDmitry Chagin 		 * directory that is an automount point. As FreeBSD does not
42ff39d74aSDmitry Chagin 		 * have such facility (automount), we can simply ignore this flag.
43ff39d74aSDmitry Chagin 		 */
44de774e42SConrad Meyer #define	LINUX_AT_EMPTY_PATH		0x1000
4548b05c3fSKonstantin Belousov 
46d825ce0aSJohn Baldwin /*
47d825ce0aSJohn Baldwin  * posix_fadvise advice
48d825ce0aSJohn Baldwin  */
49d825ce0aSJohn Baldwin #define	LINUX_POSIX_FADV_NORMAL		0
50d825ce0aSJohn Baldwin #define	LINUX_POSIX_FADV_RANDOM		1
51d825ce0aSJohn Baldwin #define	LINUX_POSIX_FADV_SEQUENTIAL	2
52d825ce0aSJohn Baldwin #define	LINUX_POSIX_FADV_WILLNEED	3
53d825ce0aSJohn Baldwin #define	LINUX_POSIX_FADV_DONTNEED	4
54d825ce0aSJohn Baldwin #define	LINUX_POSIX_FADV_NOREUSE	5
55d825ce0aSJohn Baldwin 
56d825ce0aSJohn Baldwin /*
57d825ce0aSJohn Baldwin  * mount flags
58d825ce0aSJohn Baldwin  */
59d825ce0aSJohn Baldwin #define	LINUX_MS_RDONLY		0x0001
60d825ce0aSJohn Baldwin #define	LINUX_MS_NOSUID		0x0002
61d825ce0aSJohn Baldwin #define	LINUX_MS_NODEV		0x0004
62d825ce0aSJohn Baldwin #define	LINUX_MS_NOEXEC		0x0008
63d825ce0aSJohn Baldwin #define	LINUX_MS_REMOUNT	0x0020
64d825ce0aSJohn Baldwin 
654d0f380dSDmitry Chagin /*
6666632fe7SEdward Tomasz Napierala  * umount2 flags
6766632fe7SEdward Tomasz Napierala  */
6866632fe7SEdward Tomasz Napierala #define	LINUX_MNT_FORCE		0x0001
6966632fe7SEdward Tomasz Napierala 
7066632fe7SEdward Tomasz Napierala /*
714d0f380dSDmitry Chagin  * common open/fcntl flags
724d0f380dSDmitry Chagin  */
731b11173cSEdward Tomasz Napierala #define	LINUX_O_RDONLY		000000000
741b11173cSEdward Tomasz Napierala #define	LINUX_O_WRONLY		000000001
751b11173cSEdward Tomasz Napierala #define	LINUX_O_RDWR		000000002
761b11173cSEdward Tomasz Napierala #define	LINUX_O_ACCMODE		000000003
771b11173cSEdward Tomasz Napierala #define	LINUX_O_CREAT		000000100
781b11173cSEdward Tomasz Napierala #define	LINUX_O_EXCL		000000200
791b11173cSEdward Tomasz Napierala #define	LINUX_O_NOCTTY		000000400
801b11173cSEdward Tomasz Napierala #define	LINUX_O_TRUNC		000001000
811b11173cSEdward Tomasz Napierala #define	LINUX_O_APPEND		000002000
821b11173cSEdward Tomasz Napierala #define	LINUX_O_NONBLOCK	000004000
834d0f380dSDmitry Chagin #define	LINUX_O_NDELAY		LINUX_O_NONBLOCK
841b11173cSEdward Tomasz Napierala #define	LINUX_O_SYNC		000010000
851b11173cSEdward Tomasz Napierala #define	LINUX_O_ASYNC		000020000
86fc37be24SDmitry Chagin #ifndef LINUX_O_DIRECT
871b11173cSEdward Tomasz Napierala #define	LINUX_O_DIRECT		000040000	/* Direct disk access hint */
88fc37be24SDmitry Chagin #endif
89fc37be24SDmitry Chagin #ifndef LINUX_O_LARGEFILE
901b11173cSEdward Tomasz Napierala #define	LINUX_O_LARGEFILE	000100000
91fc37be24SDmitry Chagin #endif
92fc37be24SDmitry Chagin #ifndef LINUX_O_DIRECTORY
931b11173cSEdward Tomasz Napierala #define	LINUX_O_DIRECTORY	000200000	/* Must be a directory */
94fc37be24SDmitry Chagin #endif
95fc37be24SDmitry Chagin #ifndef LINUX_O_NOFOLLOW
961b11173cSEdward Tomasz Napierala #define	LINUX_O_NOFOLLOW	000400000	/* Do not follow links */
97fc37be24SDmitry Chagin #endif
981b11173cSEdward Tomasz Napierala #define	LINUX_O_NOATIME		001000000
991b11173cSEdward Tomasz Napierala #define	LINUX_O_CLOEXEC		002000000
1001663120aSEdward Tomasz Napierala #define	LINUX_O_PATH		010000000
1014d0f380dSDmitry Chagin 
1024d0f380dSDmitry Chagin #define	LINUX_F_DUPFD		0
1034d0f380dSDmitry Chagin #define	LINUX_F_GETFD		1
1044d0f380dSDmitry Chagin #define	LINUX_F_SETFD		2
1054d0f380dSDmitry Chagin #define	LINUX_F_GETFL		3
1064d0f380dSDmitry Chagin #define	LINUX_F_SETFL		4
1074d0f380dSDmitry Chagin #ifndef LINUX_F_GETLK
1084d0f380dSDmitry Chagin #define	LINUX_F_GETLK		5
1094d0f380dSDmitry Chagin #define	LINUX_F_SETLK		6
1104d0f380dSDmitry Chagin #define	LINUX_F_SETLKW		7
1114d0f380dSDmitry Chagin #endif
1124d0f380dSDmitry Chagin #ifndef LINUX_F_SETOWN
1134d0f380dSDmitry Chagin #define	LINUX_F_SETOWN		8
1144d0f380dSDmitry Chagin #define	LINUX_F_GETOWN		9
1154d0f380dSDmitry Chagin #endif
116bfa4d74bSDmitry Chagin #ifndef LINUX_F_SETSIG
117bfa4d74bSDmitry Chagin #define	LINUX_F_SETSIG		10
118bfa4d74bSDmitry Chagin #define	LINUX_F_GETSIG		11
119bfa4d74bSDmitry Chagin #endif
120bfa4d74bSDmitry Chagin #ifndef LINUX_F_SETOWN_EX
121bfa4d74bSDmitry Chagin #define	LINUX_F_SETOWN_EX	15
122bfa4d74bSDmitry Chagin #define	LINUX_F_GETOWN_EX	16
123bfa4d74bSDmitry Chagin #define	LINUX_F_GETOWNER_UIDS	17
124bfa4d74bSDmitry Chagin #endif
125bfa4d74bSDmitry Chagin 
126bfa4d74bSDmitry Chagin #define	LINUX_F_SPECIFIC_BASE	1024
127bfa4d74bSDmitry Chagin 
128bfa4d74bSDmitry Chagin #define	LINUX_F_SETLEASE	(LINUX_F_SPECIFIC_BASE + 0)
129bfa4d74bSDmitry Chagin #define	LINUX_F_GETLEASE	(LINUX_F_SPECIFIC_BASE + 1)
130bfa4d74bSDmitry Chagin #define	LINUX_F_CANCELLK	(LINUX_F_SPECIFIC_BASE + 5)
131bfa4d74bSDmitry Chagin #define	LINUX_F_DUPFD_CLOEXEC	(LINUX_F_SPECIFIC_BASE + 6)
132bfa4d74bSDmitry Chagin #define	LINUX_F_NOTIFY		(LINUX_F_SPECIFIC_BASE + 2)
133bfa4d74bSDmitry Chagin #define	LINUX_F_SETPIPE_SZ	(LINUX_F_SPECIFIC_BASE + 7)
134bfa4d74bSDmitry Chagin #define	LINUX_F_GETPIPE_SZ	(LINUX_F_SPECIFIC_BASE + 8)
135bfa4d74bSDmitry Chagin 
1365403f186SKyle Evans #define	LINUX_F_ADD_SEALS	(LINUX_F_SPECIFIC_BASE + 9)
1375403f186SKyle Evans #define	LINUX_F_GET_SEALS	(LINUX_F_SPECIFIC_BASE + 10)
1385403f186SKyle Evans 
139bfa4d74bSDmitry Chagin #define	LINUX_F_GETLKP		36
140bfa4d74bSDmitry Chagin #define	LINUX_F_SETLKP		37
141bfa4d74bSDmitry Chagin #define	LINUX_F_SETLKPW		38
142bfa4d74bSDmitry Chagin 
143bfa4d74bSDmitry Chagin #define	LINUX_F_OWNER_TID	0
144bfa4d74bSDmitry Chagin #define	LINUX_F_OWNER_PID	1
145bfa4d74bSDmitry Chagin #define	LINUX_F_OWNER_PGRP	2
1464d0f380dSDmitry Chagin 
1474d0f380dSDmitry Chagin #ifndef LINUX_F_RDLCK
1484d0f380dSDmitry Chagin #define	LINUX_F_RDLCK		0
1494d0f380dSDmitry Chagin #define	LINUX_F_WRLCK		1
1504d0f380dSDmitry Chagin #define	LINUX_F_UNLCK		2
1514d0f380dSDmitry Chagin #endif
1524d0f380dSDmitry Chagin 
15301b9ee4cSEd Maste /*
15401b9ee4cSEd Maste  * renameat2 flags
15501b9ee4cSEd Maste  */
15601b9ee4cSEd Maste #define	LINUX_RENAME_NOREPLACE	0x00000001
15701b9ee4cSEd Maste #define	LINUX_RENAME_EXCHANGE	0x00000002
15801b9ee4cSEd Maste #define	LINUX_RENAME_WHITEOUT	0x00000004
15901b9ee4cSEd Maste 
160cf69fe66SEdward Tomasz Napierala /*
161cf69fe66SEdward Tomasz Napierala  * sync_file_range flags
162cf69fe66SEdward Tomasz Napierala  */
163cf69fe66SEdward Tomasz Napierala #define	LINUX_SYNC_FILE_RANGE_WAIT_BEFORE	1
164cf69fe66SEdward Tomasz Napierala #define	LINUX_SYNC_FILE_RANGE_WRITE		2
165cf69fe66SEdward Tomasz Napierala #define	LINUX_SYNC_FILE_RANGE_WAIT_AFTER	4
166cf69fe66SEdward Tomasz Napierala 
1675403f186SKyle Evans #define	LINUX_F_SEAL_SEAL	0x0001
1685403f186SKyle Evans #define	LINUX_F_SEAL_SHRINK	0x0002
1695403f186SKyle Evans #define	LINUX_F_SEAL_GROW	0x0004
1705403f186SKyle Evans #define	LINUX_F_SEAL_WRITE	0x0008
1715403f186SKyle Evans 
1725403f186SKyle Evans #define	LINUX_MFD_CLOEXEC	0x0001
1735403f186SKyle Evans #define	LINUX_MFD_ALLOW_SEALING	0x0002
1745403f186SKyle Evans #define	LINUX_MFD_HUGETLB	0x0004
1755403f186SKyle Evans 
1765403f186SKyle Evans #define	LINUX_HUGETLB_FLAG_ENCODE_SHIFT	26
1775403f186SKyle Evans #define	LINUX_HUGETLB_FLAG_ENCODE_MASK	0x3f
1785403f186SKyle Evans 
1795403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_64KB	(16 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1805403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_512KB	(19 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1815403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_1MB	(20 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1825403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_2MB	(21 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1835403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_8MB	(23 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1845403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_16MB	(24 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1855403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_32MB	(25 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1865403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_256MB	(28 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1875403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_512MB	(29 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1885403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_1GB	(30 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1895403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_2GB	(31 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1905403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_16GB	(34U << LINUX_HUGETLB_FLAG_ENCODE_SHIFT)
1915403f186SKyle Evans 
192e58ff664SDmitry Chagin #if defined(_KERNEL)
193de774e42SConrad Meyer struct l_file_handle {
194de774e42SConrad Meyer 	l_uint handle_bytes;
195de774e42SConrad Meyer 	l_int handle_type;
196de774e42SConrad Meyer 	unsigned char f_handle[0];
197de774e42SConrad Meyer };
198de774e42SConrad Meyer 
199e58ff664SDmitry Chagin int	linux_enobufs2eagain(struct thread *, int, int);
200*9c7b1bf2SRicardo Branco int	linux_common_openflags(int);
201e58ff664SDmitry Chagin #endif
202e58ff664SDmitry Chagin 
20371bc1780SDmitry Chagin /*
20471bc1780SDmitry Chagin  * Look at linux_close_range() for an explanation.
20571bc1780SDmitry Chagin  *
20671bc1780SDmitry Chagin  * #define	LINUX_CLOSE_RANGE_UNSHARE	(1U << 1)
20771bc1780SDmitry Chagin  */
20871bc1780SDmitry Chagin #define	LINUX_CLOSE_RANGE_CLOEXEC	(1U << 2)
20971bc1780SDmitry Chagin 
21048b05c3fSKonstantin Belousov #endif	/* !_LINUX_FILE_H_ */
211