1/*
2 * This file is subject to the terms and conditions of the GNU General Public
3 * License.  See the file "COPYING" in the main directory of this archive
4 * for more details.
5 *
6 * Copyright (C) 1999 by Ralf Baechle
7 */
8#ifndef _ASM_FCNTL_H
9#define _ASM_FCNTL_H
10
11/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
12   located on an ext2 file system */
13#define O_ACCMODE	0x0003
14#define O_RDONLY	0x0000
15#define O_WRONLY	0x0001
16#define O_RDWR		0x0002
17#define O_APPEND	0x0008
18#define O_SYNC		0x0010
19#define O_NONBLOCK	0x0080
20#define O_CREAT         0x0100	/* not fcntl */
21#define O_TRUNC		0x0200	/* not fcntl */
22#define O_EXCL		0x0400	/* not fcntl */
23#define O_NOCTTY	0x0800	/* not fcntl */
24#define FASYNC		0x1000	/* fcntl, for BSD compatibility */
25#define O_LARGEFILE	0x2000	/* allow large file opens */
26#define O_DIRECT	0x8000	/* direct disk access hint */
27#define O_DIRECTORY	0x10000	/* must be a directory */
28#define O_NOFOLLOW	0x20000	/* don't follow links */
29
30#define O_NDELAY	O_NONBLOCK
31
32#define F_DUPFD		0	/* dup */
33#define F_GETFD		1	/* get close_on_exec */
34#define F_SETFD		2	/* set/clear close_on_exec */
35#define F_GETFL		3	/* get file->f_flags */
36#define F_SETFL		4	/* set file->f_flags */
37#define F_GETLK		14
38#define F_SETLK		6
39#define F_SETLKW	7
40
41#define F_SETOWN	24	/*  for sockets. */
42#define F_GETOWN	23	/*  for sockets. */
43#define F_SETSIG	10	/*  for sockets. */
44#define F_GETSIG	11	/*  for sockets. */
45
46#ifdef __KERNEL__
47#define F_GETLK64	33	/*  using 'struct flock64' */
48#define F_SETLK64	34
49#define F_SETLKW64	35
50#endif
51
52/* for F_[GET|SET]FL */
53#define FD_CLOEXEC	1	/* actually anything with low bit set goes */
54
55/* for posix fcntl() and lockf() */
56#define F_RDLCK		0
57#define F_WRLCK		1
58#define F_UNLCK		2
59
60/* for old implementation of bsd flock () */
61#define F_EXLCK		4	/* or 3 */
62#define F_SHLCK		8	/* or 4 */
63
64/* for leases */
65#define F_INPROGRESS	16
66
67/* operations for bsd flock(), also used by the kernel implementation */
68#define LOCK_SH		1	/* shared lock */
69#define LOCK_EX		2	/* exclusive lock */
70#define LOCK_NB		4	/* or'd with one of the above to prevent
71				   blocking */
72#define LOCK_UN		8	/* remove lock */
73
74#define LOCK_MAND	32	/* This is a mandatory flock */
75#define LOCK_READ	64	/* ... Which allows concurrent read operations */
76#define LOCK_WRITE	128	/* ... Which allows concurrent write operations */
77#define LOCK_RW		192	/* ... Which allows concurrent read & write ops */
78
79typedef struct flock {
80	short l_type;
81	short l_whence;
82	__kernel_off_t l_start;
83	__kernel_off_t l_len;
84	long  l_sysid;
85	__kernel_pid_t l_pid;
86	long  pad[4];
87} flock_t;
88
89#ifdef __KERNEL__
90struct flock32 {				/* for 32-bit compat code */
91	short	l_type;
92	short	l_whence;
93	__kernel_off_t32 l_start;
94	__kernel_off_t32 l_len;
95	__s32	l_sysid;
96	__kernel_pid_t32 l_pid;
97	short	__unused;
98	__s32	pad[4];
99};
100
101#define flock64		flock
102#endif
103
104#define F_LINUX_SPECIFIC_BASE	1024
105
106#endif /* _ASM_FCNTL_H */
107