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