xref: /titanic_41/usr/src/uts/common/sys/rsm/rsm_common.h (revision 7c478bd95313f5f23a4c958a745db2134aa03244)
1*7c478bd9Sstevel@tonic-gate /*
2*7c478bd9Sstevel@tonic-gate  * CDDL HEADER START
3*7c478bd9Sstevel@tonic-gate  *
4*7c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*7c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*7c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*7c478bd9Sstevel@tonic-gate  * with the License.
8*7c478bd9Sstevel@tonic-gate  *
9*7c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*7c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*7c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*7c478bd9Sstevel@tonic-gate  * and limitations under the License.
13*7c478bd9Sstevel@tonic-gate  *
14*7c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*7c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*7c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*7c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*7c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*7c478bd9Sstevel@tonic-gate  *
20*7c478bd9Sstevel@tonic-gate  * CDDL HEADER END
21*7c478bd9Sstevel@tonic-gate  */
22*7c478bd9Sstevel@tonic-gate /*
23*7c478bd9Sstevel@tonic-gate  * Copyright (c) 1999-2001 by Sun Microsystems, Inc.
24*7c478bd9Sstevel@tonic-gate  * All rights reserved.
25*7c478bd9Sstevel@tonic-gate  */
26*7c478bd9Sstevel@tonic-gate 
27*7c478bd9Sstevel@tonic-gate #ifndef _SYS_RSM_RSM_COMMON_H
28*7c478bd9Sstevel@tonic-gate #define	_SYS_RSM_RSM_COMMON_H
29*7c478bd9Sstevel@tonic-gate 
30*7c478bd9Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
31*7c478bd9Sstevel@tonic-gate 
32*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
33*7c478bd9Sstevel@tonic-gate extern "C" {
34*7c478bd9Sstevel@tonic-gate #endif
35*7c478bd9Sstevel@tonic-gate 
36*7c478bd9Sstevel@tonic-gate #define	RSM_VERSION	5
37*7c478bd9Sstevel@tonic-gate 
38*7c478bd9Sstevel@tonic-gate /* Return values for RSMAPI */
39*7c478bd9Sstevel@tonic-gate #define	RSM_SUCCESS 0
40*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_LIBRARY_VERSION		1
41*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_TOPOLOGY_PTR			2
42*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_CTLR_HNDL			3
43*7c478bd9Sstevel@tonic-gate #define	RSMERR_CTLR_NOT_PRESENT			4
44*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_SEG_HNDL			5
45*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_ALREADY_PUBLISHED		6
46*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_NOT_PUBLISHED		7
47*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_NOT_PUBLISHED_TO_NODE	8
48*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_ALREADY_MAPPED		9
49*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_STILL_MAPPED			10
50*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_NOT_MAPPED			11
51*7c478bd9Sstevel@tonic-gate #define	RSMERR_NOT_CREATOR			12
52*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_BARRIER_PTR			13
53*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_SGIO				14
54*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_LOCALMEM_HNDL		15
55*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_ADDR				16
56*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_MEM_ALIGNMENT		17
57*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_OFFSET			18
58*7c478bd9Sstevel@tonic-gate #define	RSMERR_MISALIGNED_OFFSET		19
59*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_LENGTH			20
60*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_ACL				21
61*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_SEGID			22
62*7c478bd9Sstevel@tonic-gate #define	RSMERR_RESERVED_SEGID			23
63*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEGID_IN_USE			24
64*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_MODE				25
65*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_PERMS			26
66*7c478bd9Sstevel@tonic-gate #define	RSMERR_PERM_DENIED			27
67*7c478bd9Sstevel@tonic-gate #define	RSMERR_LOCKS_NOT_SUPPORTED		28
68*7c478bd9Sstevel@tonic-gate #define	RSMERR_LOCKS_NOT_ENABLED		29
69*7c478bd9Sstevel@tonic-gate #define	RSMERR_REBIND_NOT_ALLOWED		30
70*7c478bd9Sstevel@tonic-gate #define	RSMERR_INSUFFICIENT_RESOURCES		31
71*7c478bd9Sstevel@tonic-gate #define	RSMERR_INSUFFICIENT_MEM			32
72*7c478bd9Sstevel@tonic-gate #define	RSMERR_MAP_FAILED			33
73*7c478bd9Sstevel@tonic-gate #define	RSMERR_POLLFD_IN_USE			34
74*7c478bd9Sstevel@tonic-gate #define	RSMERR_BARRIER_UNINITIALIZED		35
75*7c478bd9Sstevel@tonic-gate #define	RSMERR_BARRIER_OPEN_FAILED		36
76*7c478bd9Sstevel@tonic-gate #define	RSMERR_BARRIER_NOT_OPENED		37
77*7c478bd9Sstevel@tonic-gate #define	RSMERR_BARRIER_FAILURE			38
78*7c478bd9Sstevel@tonic-gate #define	RSMERR_REMOTE_NODE_UNREACHABLE		39
79*7c478bd9Sstevel@tonic-gate #define	RSMERR_CONN_ABORTED			40
80*7c478bd9Sstevel@tonic-gate #define	RSMERR_INTERRUPTED			41
81*7c478bd9Sstevel@tonic-gate #define	RSMERR_TIMEOUT				42
82*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_APPID			43
83*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_CONF				44
84*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_NOT_CONNECTED		45
85*7c478bd9Sstevel@tonic-gate 
86*7c478bd9Sstevel@tonic-gate /* Additional return values for RSMPI */
87*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_DRIVER_VERSION		101
88*7c478bd9Sstevel@tonic-gate #define	RSMERR_UNSUPPORTED_VERSION		102
89*7c478bd9Sstevel@tonic-gate #define	RSMERR_DRIVER_NAME_IN_USE		103
90*7c478bd9Sstevel@tonic-gate #define	RSMERR_DRIVER_NOT_REGISTERED		104
91*7c478bd9Sstevel@tonic-gate #define	RSMERR_DRIVER_THREAD_RUNNING		105
92*7c478bd9Sstevel@tonic-gate #define	RSMERR_NEED_THREAD_INIT			106
93*7c478bd9Sstevel@tonic-gate #define	RSMERR_THREAD_NOT_INITED		107
94*7c478bd9Sstevel@tonic-gate #define	RSMERR_CTLRS_REGISTERED			108
95*7c478bd9Sstevel@tonic-gate #define	RSMERR_CTLR_NOT_REGISTERED		109
96*7c478bd9Sstevel@tonic-gate #define	RSMERR_CTLR_ALREADY_REGISTERED		110
97*7c478bd9Sstevel@tonic-gate #define	RSMERR_CTLR_IN_USE			111
98*7c478bd9Sstevel@tonic-gate #define	RSMERR_NAME_TOO_LONG			112
99*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_PUBLISHED			113
100*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_NOT_PUBLISHED_TO_RSM_ADDR	114
101*7c478bd9Sstevel@tonic-gate #define	RSMERR_SEG_IN_USE			115
102*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_SENDQ_HNDL			116
103*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_ARGS_ERRORS			117
104*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_MSTYPE			118
105*7c478bd9Sstevel@tonic-gate #define	RSMERR_NO_BACKING_MEM			119
106*7c478bd9Sstevel@tonic-gate #define	RSMERR_NOT_MEM				120
107*7c478bd9Sstevel@tonic-gate #define	RSMERR_MEM_ALREADY_BOUND		121
108*7c478bd9Sstevel@tonic-gate #define	RSMERR_MEM_NOT_BOUND			122
109*7c478bd9Sstevel@tonic-gate #define	RSMERR_HANDLER_NOT_REGISTERED		123
110*7c478bd9Sstevel@tonic-gate #define	RSMERR_NO_HANDLER			124
111*7c478bd9Sstevel@tonic-gate #define	RSMERR_UNBIND_REBIND_NOT_ALLOWED	125
112*7c478bd9Sstevel@tonic-gate #define	RSMERR_CALLBACKS_NOT_SUPPORTED		126
113*7c478bd9Sstevel@tonic-gate #define	RSMERR_UNSUPPORTED_OPERATION		127
114*7c478bd9Sstevel@tonic-gate #define	RSMERR_RSM_ADDR_UNREACHABLE		128
115*7c478bd9Sstevel@tonic-gate #define	RSMERR_UNKNOWN_RSM_ADDR			129
116*7c478bd9Sstevel@tonic-gate #define	RSMERR_BAD_BARRIER_HNDL			130
117*7c478bd9Sstevel@tonic-gate #define	RSMERR_COMM_ERR_MAYBE_DELIVERED		131
118*7c478bd9Sstevel@tonic-gate #define	RSMERR_COMM_ERR_NOT_DELIVERED		132
119*7c478bd9Sstevel@tonic-gate #define	RSMERR_QUEUE_FENCE_UP			133
120*7c478bd9Sstevel@tonic-gate #define	RSMERR_QUEUE_FULL			134
121*7c478bd9Sstevel@tonic-gate 
122*7c478bd9Sstevel@tonic-gate #define	RSMERR_INTERNAL_ERROR			100
123*7c478bd9Sstevel@tonic-gate 
124*7c478bd9Sstevel@tonic-gate /*
125*7c478bd9Sstevel@tonic-gate  * Partition segment id and service id space
126*7c478bd9Sstevel@tonic-gate  * users should only create segments or register handlers
127*7c478bd9Sstevel@tonic-gate  * using segment and service id's from the correct range below
128*7c478bd9Sstevel@tonic-gate  * RSM_DRIVER_PRIVATE enforced in rsm_memseg_export_publish
129*7c478bd9Sstevel@tonic-gate  * and rsm_memseg_import_connect
130*7c478bd9Sstevel@tonic-gate  */
131*7c478bd9Sstevel@tonic-gate 
132*7c478bd9Sstevel@tonic-gate #define	RSM_DRIVER_PRIVATE_ID_BASE	0
133*7c478bd9Sstevel@tonic-gate #define	RSM_DRIVER_PRIVATE_ID_END	0x0FFFFF
134*7c478bd9Sstevel@tonic-gate 
135*7c478bd9Sstevel@tonic-gate #define	RSM_CLUSTER_TRANSPORT_ID_BASE	0x100000
136*7c478bd9Sstevel@tonic-gate #define	RSM_CLUSTER_TRANSPORT_ID_END	0x1FFFFF
137*7c478bd9Sstevel@tonic-gate #define	RSM_RSMLIB_ID_BASE		0x200000
138*7c478bd9Sstevel@tonic-gate #define	RSM_RSMLIB_ID_END		0x2FFFFF
139*7c478bd9Sstevel@tonic-gate #define	RSM_DLPI_ID_BASE		0x300000
140*7c478bd9Sstevel@tonic-gate #define	RSM_DLPI_ID_END			0x3FFFFF
141*7c478bd9Sstevel@tonic-gate #define	RSM_HPC_ID_BASE			0x400000
142*7c478bd9Sstevel@tonic-gate #define	RSM_HPC_ID_END			0x4FFFFF
143*7c478bd9Sstevel@tonic-gate #define	RSM_OPS_ID_BASE			0x500000
144*7c478bd9Sstevel@tonic-gate #define	RSM_OPS_ID_END			0x5FFFFF
145*7c478bd9Sstevel@tonic-gate 
146*7c478bd9Sstevel@tonic-gate #define	RSM_USER_APP_ID_BASE		0x80000000
147*7c478bd9Sstevel@tonic-gate #define	RSM_USER_APP_ID_END		0xFFFFFFFF
148*7c478bd9Sstevel@tonic-gate 
149*7c478bd9Sstevel@tonic-gate /*
150*7c478bd9Sstevel@tonic-gate  * The following definitions and typedef are used to describe the
151*7c478bd9Sstevel@tonic-gate  * permissions associated with all or part of a memory segment.
152*7c478bd9Sstevel@tonic-gate  */
153*7c478bd9Sstevel@tonic-gate #define	RSM_PERM_NONE				0
154*7c478bd9Sstevel@tonic-gate #define	RSM_PERM_READ				0400
155*7c478bd9Sstevel@tonic-gate #define	RSM_PERM_WRITE				0200
156*7c478bd9Sstevel@tonic-gate #define	RSM_PERM_RDWR				(RSM_PERM_READ|RSM_PERM_WRITE)
157*7c478bd9Sstevel@tonic-gate 
158*7c478bd9Sstevel@tonic-gate /* Maximum io_request_count value in rsm_scat_gath_t */
159*7c478bd9Sstevel@tonic-gate #define	RSM_MAX_SGIOREQS	16
160*7c478bd9Sstevel@tonic-gate 
161*7c478bd9Sstevel@tonic-gate /*
162*7c478bd9Sstevel@tonic-gate  * Direct access sizes bits
163*7c478bd9Sstevel@tonic-gate  */
164*7c478bd9Sstevel@tonic-gate typedef enum {
165*7c478bd9Sstevel@tonic-gate 	RSM_DAS8	=	1,
166*7c478bd9Sstevel@tonic-gate 	RSM_DAS16	=	2,
167*7c478bd9Sstevel@tonic-gate 	RSM_DAS32	=	4,
168*7c478bd9Sstevel@tonic-gate 	RSM_DAS64	=	8
169*7c478bd9Sstevel@tonic-gate }rsm_access_size_t;
170*7c478bd9Sstevel@tonic-gate 
171*7c478bd9Sstevel@tonic-gate typedef uint64_t rsm_addr_t;
172*7c478bd9Sstevel@tonic-gate typedef uint32_t rsm_node_id_t;
173*7c478bd9Sstevel@tonic-gate typedef uint32_t rsm_memseg_id_t;
174*7c478bd9Sstevel@tonic-gate typedef uint32_t rsm_permission_t;
175*7c478bd9Sstevel@tonic-gate 
176*7c478bd9Sstevel@tonic-gate struct __rsm_memseg_import_handle;
177*7c478bd9Sstevel@tonic-gate typedef struct __rsm_memseg_import_handle *rsm_memseg_import_handle_t;
178*7c478bd9Sstevel@tonic-gate 
179*7c478bd9Sstevel@tonic-gate struct __rsm_memseg_export_handle;
180*7c478bd9Sstevel@tonic-gate typedef struct __rsm_memseg_export_handle *rsm_memseg_export_handle_t;
181*7c478bd9Sstevel@tonic-gate 
182*7c478bd9Sstevel@tonic-gate typedef enum {
183*7c478bd9Sstevel@tonic-gate 	RSM_BARRIER_SEGMENT = 0x01,
184*7c478bd9Sstevel@tonic-gate 	RSM_BARRIER_NODE    = 0x02,
185*7c478bd9Sstevel@tonic-gate 	RSM_BARRIER_SEGMENT_THREAD = 0x11,
186*7c478bd9Sstevel@tonic-gate 	RSM_BARRIER_NODE_THREAD = 0x12
187*7c478bd9Sstevel@tonic-gate }rsm_barrier_type_t;
188*7c478bd9Sstevel@tonic-gate 
189*7c478bd9Sstevel@tonic-gate typedef union {
190*7c478bd9Sstevel@tonic-gate 	uint64_t u64;
191*7c478bd9Sstevel@tonic-gate 	int64_t i64;
192*7c478bd9Sstevel@tonic-gate 	uint32_t u32[2];
193*7c478bd9Sstevel@tonic-gate 	int32_t i32[2];
194*7c478bd9Sstevel@tonic-gate 	uint16_t u16[4];
195*7c478bd9Sstevel@tonic-gate 	int16_t i16[4];
196*7c478bd9Sstevel@tonic-gate 	uint8_t u8[8];
197*7c478bd9Sstevel@tonic-gate 	int8_t i8[8];
198*7c478bd9Sstevel@tonic-gate 	uchar_t uc[8];
199*7c478bd9Sstevel@tonic-gate 	char c[8];
200*7c478bd9Sstevel@tonic-gate 	void *vp;
201*7c478bd9Sstevel@tonic-gate } rsm_barrier_component_t;
202*7c478bd9Sstevel@tonic-gate 
203*7c478bd9Sstevel@tonic-gate typedef struct {
204*7c478bd9Sstevel@tonic-gate 	rsm_barrier_component_t comp[4];
205*7c478bd9Sstevel@tonic-gate } rsm_barrier_t;
206*7c478bd9Sstevel@tonic-gate 
207*7c478bd9Sstevel@tonic-gate typedef enum {
208*7c478bd9Sstevel@tonic-gate 	RSM_BARRIER_MODE_EXPLICIT, RSM_BARRIER_MODE_IMPLICIT
209*7c478bd9Sstevel@tonic-gate } rsm_barrier_mode_t;
210*7c478bd9Sstevel@tonic-gate 
211*7c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
212*7c478bd9Sstevel@tonic-gate }
213*7c478bd9Sstevel@tonic-gate #endif
214*7c478bd9Sstevel@tonic-gate 
215*7c478bd9Sstevel@tonic-gate #endif /* _SYS_RSM_RSM_COMMON_H */
216