/*
 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef _ASM_ARC_FCNTL_H
#define _ASM_ARC_FCNTL_H

/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
   located on an ext2 file system */
/* #define O_ACCMODE	   0003 */
/* #define O_RDONLY	     00 */
/* #define O_WRONLY	     01 */
/* #define O_RDWR		     02 */
/* #define O_CREAT		   0100	/\* not fcntl *\/ */
/* #define O_EXCL		   0200	/\* not fcntl *\/ */
/* #define O_NOCTTY	   0400	/\* not fcntl *\/ */
/* #define O_TRUNC		  01000	/\* not fcntl *\/ */
/* #define O_APPEND	  02000 */
/* #define O_NONBLOCK	  04000 */
#define O_NDELAY	O_NONBLOCK
/* #define O_SYNC		 010000 */
/* #define FASYNC		 020000	/\* fcntl, for BSD compatibility *\/ */
#define O_DIRECTORY	 040000	/* must be a directory */
#define O_NOFOLLOW	0100000	/* don't follow links */
#define O_DIRECT	0200000	/* direct disk access hint - currently ignored */
#define O_LARGEFILE	0400000

/* #define F_DUPFD		0	/\* dup *\/ */
/* #define F_GETFD		1	/\* get close_on_exec *\/ */
/* #define F_SETFD		2	/\* set/clear close_on_exec *\/ */
/* #define F_GETFL		3	/\* get file->f_flags *\/ */
/* #define F_SETFL		4	/\* set file->f_flags *\/ */
/* #define F_GETLK		5 */
/* #define F_SETLK		6 */
/* #define F_SETLKW	7 */

/* #define F_SETOWN	8	/\*  for sockets. *\/ */
/* #define F_GETOWN	9	/\*  for sockets. *\/ */
/* #define F_SETSIG	10	/\*  for sockets. *\/ */
/* #define F_GETSIG	11	/\*  for sockets. *\/ */

/* #define F_GETLK64	12	/\*  using 'struct flock64' *\/ */
/* #define F_SETLK64	13 */
/* #define F_SETLKW64	14 */

/* for F_[GET|SET]FL */
/* #define FD_CLOEXEC	1	/\* actually anything with low bit set goes *\/ */

/* for posix fcntl() and lockf() */
/* #define F_RDLCK		0 */
/* #define F_WRLCK		1 */
/* #define F_UNLCK		2 */

/* for old implementation of bsd flock () */
/* #define F_EXLCK		4	/\* or 3 *\/ */
/* #define F_SHLCK		8	/\* or 4 *\/ */

/* for leases */
/* #define F_INPROGRESS	16 */

/* operations for bsd flock(), also used by the kernel implementation */
/* #define LOCK_SH		1	/\* shared lock *\/ */
/* #define LOCK_EX		2	/\* exclusive lock *\/ */
/* #define LOCK_NB		4	/\* or'd with one of the above to prevent */
/* 				   blocking *\/ */
/* #define LOCK_UN		8	/\* remove lock *\/ */

/* #define LOCK_MAND	32	/\* This is a mandatory flock *\/ */
/* #define LOCK_READ	64	/\* ... Which allows concurrent read operations *\/ */
/* #define LOCK_WRITE	128	/\* ... Which allows concurrent write operations *\/ */
/* #define LOCK_RW		192	/\* ... Which allows concurrent read & write ops *\/ */

/* struct flock { */
/* 	short l_type; */
/* 	short l_whence; */
/* 	off_t l_start; */
/* 	off_t l_len; */
/* 	pid_t l_pid; */
/* }; */

/* struct flock64 { */
/* 	short  l_type; */
/* 	short  l_whence; */
/* 	loff_t l_start; */
/* 	loff_t l_len; */
/* 	pid_t  l_pid; */
/* }; */

#define F_LINUX_SPECIFIC_BASE	1024
/* Sameer: For reaching some variable definions in arch-independent code */
#include <asm-generic/fcntl.h>
#endif
