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 */
32struct 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
50struct dlm_lspace_params {
51	__u32 flags;
52	__u32 minor;
53	char name[0];
54};
55
56struct dlm_purge_params {
57	__u32 nodeid;
58	__u32 pid;
59};
60
61struct 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
74struct 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
81struct 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