aboutsummaryrefslogtreecommitdiffstats
path: root/lib/libspl/include/sys/mhd.h
blob: fcc062d51c843cebe7f2856e024a02563b5f718e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

#ifndef _SYS_MHD_H
#define	_SYS_MHD_H

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Definitions for multi-host device I/O control commands
 */
#define	MHIOC				('M'<<8)
#define	MHIOCENFAILFAST			(MHIOC|1)
#define	MHIOCTKOWN			(MHIOC|2)
#define	MHIOCRELEASE			(MHIOC|3)
#define	MHIOCSTATUS			(MHIOC|4)
#define	MHIOCGRP_INKEYS 		(MHIOC|5)
#define	MHIOCGRP_INRESV 		(MHIOC|6)
#define	MHIOCGRP_REGISTER		(MHIOC|7)
#define	MHIOCGRP_RESERVE		(MHIOC|8)
#define	MHIOCGRP_PREEMPTANDABORT	(MHIOC|9)
#define	MHIOCGRP_PREEMPT		(MHIOC|10)
#define	MHIOCGRP_CLEAR			(MHIOC|11)
#define	MHIOCGRP_REGISTERANDIGNOREKEY	(MHIOC|14)
#define	MHIOCQRESERVE			(MHIOC|12)
#define	MHIOCREREGISTERDEVID		(MHIOC|13)

/*
 * Following is the structure to specify the delay parameters in
 * milliseconds, via the MHIOCTKOWN ioctl.
 */
struct mhioctkown {
	int reinstate_resv_delay;
	int min_ownership_delay;
	int max_ownership_delay;
};

#define	MHIOC_RESV_KEY_SIZE	8
typedef struct mhioc_resv_key {
	uchar_t	key[MHIOC_RESV_KEY_SIZE];
} mhioc_resv_key_t;

typedef struct mhioc_key_list {
	uint32_t		listsize;
	uint32_t		listlen;
	mhioc_resv_key_t	*list;
} mhioc_key_list_t;

typedef struct mhioc_inkeys {
	uint32_t		generation;
	mhioc_key_list_t	*li;
} mhioc_inkeys_t;

#if defined(_SYSCALL32)
struct mhioc_key_list32 {
	uint32_t		listsize;
	uint32_t		listlen;
	caddr32_t		list;
} mhioc_key_list32_t;

struct mhioc_inkeys32 {
	uint32_t		generation;
	caddr32_t		li;
} mhioc_inkeys32_t;
#endif

typedef struct mhioc_resv_desc {
	mhioc_resv_key_t	key;
	uint8_t			type;
	uint8_t			scope;
	uint32_t		scope_specific_addr;
} mhioc_resv_desc_t;

typedef struct mhioc_resv_desc_list {
	uint32_t		listsize;
	uint32_t		listlen;
	mhioc_resv_desc_t	*list;
} mhioc_resv_desc_list_t;

typedef struct mhioc_inresvs {
	uint32_t		generation;
	mhioc_resv_desc_list_t	*li;
} mhioc_inresvs_t;

#if defined(_SYSCALL32)
struct mhioc_resv_desc_list32 {
	uint32_t		listsize;
	uint32_t		listlen;
	caddr32_t		list;
} mhioc_resv_desc_list32_t;

typedef struct mhioc_inresvs32 {
	uint32_t		generation;
	caddr32_t		li;
} mhioc_inresvs32_t;
#endif

typedef struct mhioc_register {
    mhioc_resv_key_t	oldkey;
    mhioc_resv_key_t	newkey;
    boolean_t		aptpl;  /* True if persistent across power failures */
} mhioc_register_t;

typedef struct mhioc_preemptandabort {
    mhioc_resv_desc_t	resvdesc;
    mhioc_resv_key_t	victim_key;
} mhioc_preemptandabort_t;

typedef struct mhioc_registerandignorekey {
    mhioc_resv_key_t	newkey;
    boolean_t		aptpl;  /* True if persistent across power failures */
} mhioc_registerandignorekey_t;

/*
 * SCSI-3 PGR Reservation Type Codes.  Codes with the _OBSOLETE suffix
 * have been removed from the SCSI3 PGR standard.
 */
#define	SCSI3_RESV_READSHARED_OBSOLETE			0
#define	SCSI3_RESV_WRITEEXCLUSIVE			1
#define	SCSI3_RESV_READEXCLUSIVE_OBSOLETE		2
#define	SCSI3_RESV_EXCLUSIVEACCESS			3
#define	SCSI3_RESV_SHAREDACCESS_OBSOLETE		4
#define	SCSI3_RESV_WRITEEXCLUSIVEREGISTRANTSONLY	5
#define	SCSI3_RESV_EXCLUSIVEACCESSREGISTRANTSONLY	6

#define	SCSI3_SCOPE_LOGICALUNIT				0
#define	SCSI3_SCOPE_EXTENT_OBSOLETE			1
#define	SCSI3_SCOPE_ELEMENT				2

#ifdef __cplusplus
}
#endif

#endif	/* _SYS_MHD_H */