1 /******************************************************************************
2 *******************************************************************************
3 **
4 **  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
5 **  Copyright (C) 2004-2007 Red Hat, Inc.  All rights reserved.
6 **
7 **  This copyrighted material is made available to anyone wishing to use,
8 **  modify, copy, or redistribute it subject to the terms and conditions
9 **  of the GNU General Public License v.2.
10 **
11 *******************************************************************************
12 ******************************************************************************/
13 
14 #ifndef _LINUX_DLM_DEVICE_H
15 #define _LINUX_DLM_DEVICE_H
16 
17 /* This is the device interface for dlm, most users will use a library
18  * interface.
19  */
20 
21 #include <linux/dlm.h>
22 #include <linux/types.h>
23 
24 #define DLM_USER_LVB_LEN	32
25 
26 /* Version of the device interface */
27 #define DLM_DEVICE_VERSION_MAJOR 6
28 #define DLM_DEVICE_VERSION_MINOR 0
29 #define DLM_DEVICE_VERSION_PATCH 1
30 
31 /* struct passed to the lock write */
32 struct dlm_lock_params {
33 	__u8 mode;
34 	__u8 namelen;
35 	__u16 unused;
36 	__u32 flags;
37 	__u32 lkid;
38 	__u32 parent;
39 	__u64 xid;
40 	__u64 timeout;
41 	void __user *castparam;
42 	void __user *castaddr;
43 	void __user *bastparam;
44 	void __user *bastaddr;
45 	struct dlm_lksb __user *lksb;
46 	char lvb[DLM_USER_LVB_LEN];
47 	char name[0];
48 };
49 
50 struct dlm_lspace_params {
51 	__u32 flags;
52 	__u32 minor;
53 	char name[0];
54 };
55 
56 struct dlm_purge_params {
57 	__u32 nodeid;
58 	__u32 pid;
59 };
60 
61 struct dlm_write_request {
62 	__u32 version[3];
63 	__u8 cmd;
64 	__u8 is64bit;
65 	__u8 unused[2];
66 
67 	union  {
68 		struct dlm_lock_params   lock;
69 		struct dlm_lspace_params lspace;
70 		struct dlm_purge_params  purge;
71 	} i;
72 };
73 
74 struct dlm_device_version {
75 	__u32 version[3];
76 };
77 
78 /* struct read from the "device" fd,
79    consists mainly of userspace pointers for the library to use */
80 
81 struct dlm_lock_result {
82 	__u32 version[3];
83 	__u32 length;
84 	void __user * user_astaddr;
85 	void __user * user_astparam;
86 	struct dlm_lksb __user * user_lksb;
87 	struct dlm_lksb lksb;
88 	__u8 bast_mode;
89 	__u8 unused[3];
90 	/* Offsets may be zero if no data is present */
91 	__u32 lvb_offset;
92 };
93 
94 /* Commands passed to the device */
95 #define DLM_USER_LOCK         1
96 #define DLM_USER_UNLOCK       2
97 #define DLM_USER_QUERY        3
98 #define DLM_USER_CREATE_LOCKSPACE  4
99 #define DLM_USER_REMOVE_LOCKSPACE  5
100 #define DLM_USER_PURGE        6
101 #define DLM_USER_DEADLOCK     7
102 
103 /* Lockspace flags */
104 #define DLM_USER_LSFLG_AUTOFREE   1
105 #define DLM_USER_LSFLG_FORCEFREE  2
106 
107 #endif
108 
109