1/******************************************************************************
2*******************************************************************************
3**
4**  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
5**  Copyright (C) 2004-2005 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/* This is the device interface for dlm, most users will use a library
15 * interface.
16 */
17
18#define DLM_USER_LVB_LEN	32
19
20/* Version of the device interface */
21#define DLM_DEVICE_VERSION_MAJOR 5
22#define DLM_DEVICE_VERSION_MINOR 1
23#define DLM_DEVICE_VERSION_PATCH 0
24
25/* struct passed to the lock write */
26struct dlm_lock_params {
27	__u8 mode;
28	__u8 namelen;
29	__u16 flags;
30	__u32 lkid;
31	__u32 parent;
32        void __user *castparam;
33	void __user *castaddr;
34	void __user *bastparam;
35        void __user *bastaddr;
36	struct dlm_lksb __user *lksb;
37	char lvb[DLM_USER_LVB_LEN];
38	char name[0];
39};
40
41struct dlm_lspace_params {
42	__u32 flags;
43	__u32 minor;
44	char name[0];
45};
46
47struct dlm_purge_params {
48	__u32 nodeid;
49	__u32 pid;
50};
51
52struct dlm_write_request {
53	__u32 version[3];
54	__u8 cmd;
55	__u8 is64bit;
56	__u8 unused[2];
57
58	union  {
59		struct dlm_lock_params   lock;
60		struct dlm_lspace_params lspace;
61		struct dlm_purge_params  purge;
62	} i;
63};
64
65/* struct read from the "device" fd,
66   consists mainly of userspace pointers for the library to use */
67struct dlm_lock_result {
68	__u32 length;
69	void __user * user_astaddr;
70	void __user * user_astparam;
71	struct dlm_lksb __user * user_lksb;
72	struct dlm_lksb lksb;
73	__u8 bast_mode;
74	__u8 unused[3];
75	/* Offsets may be zero if no data is present */
76	__u32 lvb_offset;
77};
78
79/* Commands passed to the device */
80#define DLM_USER_LOCK         1
81#define DLM_USER_UNLOCK       2
82#define DLM_USER_QUERY        3
83#define DLM_USER_CREATE_LOCKSPACE  4
84#define DLM_USER_REMOVE_LOCKSPACE  5
85#define DLM_USER_PURGE        6
86
87/* Arbitrary length restriction */
88#define MAX_LS_NAME_LEN 64
89
90/* Lockspace flags */
91#define DLM_USER_LSFLG_AUTOFREE   1
92#define DLM_USER_LSFLG_FORCEFREE  2
93