1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _ASM_GENERIC_FCNTL_H
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _ASM_GENERIC_FCNTL_H
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FMODE_EXEC is 0x20
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FMODE_NONOTIFY is 0x1000000
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * These cannot be used by userspace O_* until internal and external open
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * flags are split.
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * -Eric Paris
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * When introducing new O_* bits, please check its uniqueness in fcntl_init().
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_ACCMODE	00000003
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_RDONLY	00000000
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_WRONLY	00000001
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_RDWR		00000002
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_CREAT
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_CREAT		00000100	/* not fcntl */
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_EXCL
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_EXCL		00000200	/* not fcntl */
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NOCTTY
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NOCTTY	00000400	/* not fcntl */
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_TRUNC
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_TRUNC		00001000	/* not fcntl */
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_APPEND
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_APPEND	00002000
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NONBLOCK
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NONBLOCK	00004000
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_DSYNC
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_DSYNC		00010000	/* used to be O_SYNC, see below */
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef FASYNC
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FASYNC		00020000	/* fcntl, for BSD compatibility */
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_DIRECT
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_DIRECT	00040000	/* direct disk access hint */
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_LARGEFILE
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_LARGEFILE	00100000
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_DIRECTORY
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_DIRECTORY	00200000	/* must be a directory */
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NOFOLLOW
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NOFOLLOW	00400000	/* don't follow links */
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NOATIME
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NOATIME	01000000
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_CLOEXEC
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_CLOEXEC	02000000	/* set close_on_exec */
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the O_SYNC flag.  We continue to use the existing numerical value
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * for O_DSYNC semantics now, but using the correct symbolic name for it.
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This new value is used to request true Posix O_SYNC semantics.  It is
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * defined in this strange way to make sure applications compiled against
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * new headers get at least O_DSYNC semantics on older kernels.
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This has the nice side-effect that we can simply test for O_DSYNC
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * wherever we do not care if O_DSYNC or O_SYNC is used.
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Note: __O_SYNC must never be used directly.
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_SYNC
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __O_SYNC	04000000
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_SYNC		(__O_SYNC|O_DSYNC)
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_PATH
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_PATH		010000000
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
87e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#ifndef __O_TMPFILE
88e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define __O_TMPFILE	020000000
89e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#endif
90e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
91e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/* a horrid kludge trying to make sure that this will fail on old kernels */
92e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY)
93e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT)
94e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NDELAY
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NDELAY	O_NONBLOCK
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_DUPFD		0	/* dup */
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETFD		1	/* get close_on_exec */
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETFD		2	/* set/clear close_on_exec */
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETFL		3	/* get file->f_flags */
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETFL		4	/* set file->f_flags */
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_GETLK
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETLK		5
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETLK		6
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETLKW	7
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_SETOWN
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETOWN	8	/* for sockets. */
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETOWN	9	/* for sockets. */
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_SETSIG
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETSIG	10	/* for sockets. */
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETSIG	11	/* for sockets. */
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef CONFIG_64BIT
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_GETLK64
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETLK64	12	/*  using 'struct flock64' */
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETLK64	13
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETLKW64	14
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_SETOWN_EX
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETOWN_EX	15
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETOWN_EX	16
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_GETOWNER_UIDS
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETOWNER_UIDS	17
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_OWNER_TID	0
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_OWNER_PID	1
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_OWNER_PGRP	2
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct f_owner_ex {
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int	type;
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_pid_t	pid;
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* for F_[GET|SET]FL */
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FD_CLOEXEC	1	/* actually anything with low bit set goes */
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* for posix fcntl() and lockf() */
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_RDLCK
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_RDLCK		0
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_WRLCK		1
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_UNLCK		2
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* for old implementation of bsd flock () */
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_EXLCK
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_EXLCK		4	/* or 3 */
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SHLCK		8	/* or 4 */
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* operations for bsd flock(), also used by the kernel implementation */
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_SH		1	/* shared lock */
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_EX		2	/* exclusive lock */
163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_NB		4	/* or'd with one of the above to prevent
164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				   blocking */
165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_UN		8	/* remove lock */
166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_MAND	32	/* This is a mandatory flock ... */
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_READ	64	/* which allows concurrent read operations */
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_WRITE	128	/* which allows concurrent write operations */
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_RW		192	/* which allows concurrent read & write ops */
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_LINUX_SPECIFIC_BASE	1024
173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef HAVE_ARCH_STRUCT_FLOCK
175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __ARCH_FLOCK_PAD
176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __ARCH_FLOCK_PAD
177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct flock {
180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	short	l_type;
181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	short	l_whence;
182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_off_t	l_start;
183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_off_t	l_len;
184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_pid_t	l_pid;
185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__ARCH_FLOCK_PAD
186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef CONFIG_64BIT
190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef HAVE_ARCH_STRUCT_FLOCK64
192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __ARCH_FLOCK64_PAD
193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __ARCH_FLOCK64_PAD
194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct flock64 {
197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	short  l_type;
198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	short  l_whence;
199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_loff_t l_start;
200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_loff_t l_len;
201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_pid_t  l_pid;
202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__ARCH_FLOCK64_PAD
203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* !CONFIG_64BIT */
206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _ASM_GENERIC_FCNTL_H */
208