140af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#ifndef _GENLOCK_H_
240af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define _GENLOCK_H_
340af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
440af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#ifdef __KERNEL__
540af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
640af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevstruct genlock;
740af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevstruct genlock_handle;
840af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
940af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevstruct genlock_handle *genlock_get_handle(void);
1040af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevstruct genlock_handle *genlock_get_handle_fd(int fd);
1140af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevvoid genlock_put_handle(struct genlock_handle *handle);
1240af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevstruct genlock *genlock_create_lock(struct genlock_handle *);
1340af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevstruct genlock *genlock_attach_lock(struct genlock_handle *, int fd);
1440af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevint genlock_wait(struct genlock_handle *handle, u32 timeout);
1540af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev/* genlock_release_lock was deprecated */
1640af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevint genlock_lock(struct genlock_handle *handle, int op, int flags,
1740af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	u32 timeout);
1840af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#endif
1940af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
2040af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_UNLOCK 0
2140af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_WRLOCK 1
2240af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_RDLOCK 2
2340af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
2440af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_NOBLOCK       (1 << 0)
2540af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_WRITE_TO_READ (1 << 1)
2640af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
2740af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchevstruct genlock_lock {
2840af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	int fd;
2940af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	int op;
3040af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	int flags;
3140af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	int timeout;
3240af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev};
3340af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
3440af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_IOC_MAGIC     'G'
3540af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
3640af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_IOC_NEW _IO(GENLOCK_IOC_MAGIC, 0)
3740af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_IOC_EXPORT _IOR(GENLOCK_IOC_MAGIC, 1, \
3840af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	struct genlock_lock)
3940af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_IOC_ATTACH _IOW(GENLOCK_IOC_MAGIC, 2, \
4040af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	struct genlock_lock)
4140af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
4240af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev/* Deprecated */
4340af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_IOC_LOCK _IOW(GENLOCK_IOC_MAGIC, 3, \
4440af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	struct genlock_lock)
4540af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev
4640af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev/* Deprecated */
4740af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_IOC_RELEASE _IO(GENLOCK_IOC_MAGIC, 4)
4840af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_IOC_WAIT _IOW(GENLOCK_IOC_MAGIC, 5, \
4940af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	struct genlock_lock)
5040af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#define GENLOCK_IOC_DREADLOCK _IOW(GENLOCK_IOC_MAGIC, 6, \
5140af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev	struct genlock_lock)
5240af94e5102660658c99720feb0664e15f1d3a7eIliyan Malchev#endif
53