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