1d6b92ffaSHans Petter Selasky /*
2d6b92ffaSHans Petter Selasky  * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
3d6b92ffaSHans Petter Selasky  * Copyright (c) 2002-2010 Mellanox Technologies LTD. All rights reserved.
4d6b92ffaSHans Petter Selasky  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5d6b92ffaSHans Petter Selasky  *
6d6b92ffaSHans Petter Selasky  * This software is available to you under a choice of one of two
7d6b92ffaSHans Petter Selasky  * licenses.  You may choose to be licensed under the terms of the GNU
8d6b92ffaSHans Petter Selasky  * General Public License (GPL) Version 2, available from the file
9d6b92ffaSHans Petter Selasky  * COPYING in the main directory of this source tree, or the
10d6b92ffaSHans Petter Selasky  * OpenIB.org BSD license below:
11d6b92ffaSHans Petter Selasky  *
12d6b92ffaSHans Petter Selasky  *     Redistribution and use in source and binary forms, with or
13d6b92ffaSHans Petter Selasky  *     without modification, are permitted provided that the following
14d6b92ffaSHans Petter Selasky  *     conditions are met:
15d6b92ffaSHans Petter Selasky  *
16d6b92ffaSHans Petter Selasky  *      - Redistributions of source code must retain the above
17d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
18d6b92ffaSHans Petter Selasky  *        disclaimer.
19d6b92ffaSHans Petter Selasky  *
20d6b92ffaSHans Petter Selasky  *      - Redistributions in binary form must reproduce the above
21d6b92ffaSHans Petter Selasky  *        copyright notice, this list of conditions and the following
22d6b92ffaSHans Petter Selasky  *        disclaimer in the documentation and/or other materials
23d6b92ffaSHans Petter Selasky  *        provided with the distribution.
24d6b92ffaSHans Petter Selasky  *
25d6b92ffaSHans Petter Selasky  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26d6b92ffaSHans Petter Selasky  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27d6b92ffaSHans Petter Selasky  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28d6b92ffaSHans Petter Selasky  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29d6b92ffaSHans Petter Selasky  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30d6b92ffaSHans Petter Selasky  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31d6b92ffaSHans Petter Selasky  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32d6b92ffaSHans Petter Selasky  * SOFTWARE.
33d6b92ffaSHans Petter Selasky  *
34d6b92ffaSHans Petter Selasky  */
35d6b92ffaSHans Petter Selasky 
36d6b92ffaSHans Petter Selasky /*
37d6b92ffaSHans Petter Selasky  * Abstract:
38d6b92ffaSHans Petter Selasky  *	Defines standard return codes, keywords, macros, and debug levels.
39d6b92ffaSHans Petter Selasky  */
40d6b92ffaSHans Petter Selasky 
41d6b92ffaSHans Petter Selasky #ifdef __WIN__
42d6b92ffaSHans Petter Selasky #pragma warning(disable : 4996)
43d6b92ffaSHans Petter Selasky #endif
44d6b92ffaSHans Petter Selasky 
45d6b92ffaSHans Petter Selasky #ifndef _CL_TYPES_H_
46d6b92ffaSHans Petter Selasky #define _CL_TYPES_H_
47d6b92ffaSHans Petter Selasky 
48d6b92ffaSHans Petter Selasky #ifdef __cplusplus
49d6b92ffaSHans Petter Selasky #  define BEGIN_C_DECLS extern "C" {
50d6b92ffaSHans Petter Selasky #  define END_C_DECLS   }
51d6b92ffaSHans Petter Selasky #else				/* !__cplusplus */
52d6b92ffaSHans Petter Selasky #  define BEGIN_C_DECLS
53d6b92ffaSHans Petter Selasky #  define END_C_DECLS
54d6b92ffaSHans Petter Selasky #endif				/* __cplusplus */
55d6b92ffaSHans Petter Selasky 
56d6b92ffaSHans Petter Selasky BEGIN_C_DECLS
57d6b92ffaSHans Petter Selasky #include <complib/cl_types_osd.h>
58d6b92ffaSHans Petter Selasky #include <stddef.h>
59d6b92ffaSHans Petter Selasky typedef uint16_t net16_t;
60d6b92ffaSHans Petter Selasky typedef uint32_t net32_t;
61d6b92ffaSHans Petter Selasky typedef uint64_t net64_t;
62d6b92ffaSHans Petter Selasky 
63d6b92ffaSHans Petter Selasky /* explicit cast of void* to uint32_t */
64d6b92ffaSHans Petter Selasky #ifndef ASSERT_VOIDP2UINTN
65d6b92ffaSHans Petter Selasky #if __WORDSIZE == 64
66d6b92ffaSHans Petter Selasky #define ASSERT_VOIDP2UINTN(var) \
67d6b92ffaSHans Petter Selasky 	CL_ASSERT( (intptr_t)var <= 0xffffffffffffffffL )
68d6b92ffaSHans Petter Selasky #else				/*  __WORDSIZE == 64 */
69d6b92ffaSHans Petter Selasky #if __WORDSIZE == 32
70d6b92ffaSHans Petter Selasky   /* need to cast carefully to avoid the warining of un-needed check */
71d6b92ffaSHans Petter Selasky #define ASSERT_VOIDP2UINTN(var) \
72d6b92ffaSHans Petter Selasky 	CL_ASSERT( (intptr_t)var <= 0x100000000ULL )
73d6b92ffaSHans Petter Selasky #else				/*  __WORDSIZE == 32 */
74d6b92ffaSHans Petter Selasky #error "Need to know WORDSIZE to tell how to cast to unsigned long int"
75d6b92ffaSHans Petter Selasky #endif				/*  __WORDSIZE == 32 */
76d6b92ffaSHans Petter Selasky #endif				/*  __WORDSIZE == 64 */
77d6b92ffaSHans Petter Selasky #endif
78d6b92ffaSHans Petter Selasky 
79d6b92ffaSHans Petter Selasky /* explicit casting of void* to long */
80d6b92ffaSHans Petter Selasky #ifndef CAST_P2LONG
81d6b92ffaSHans Petter Selasky #define CAST_P2LONG(var) ((intptr_t)(var))
82d6b92ffaSHans Petter Selasky #endif
83d6b92ffaSHans Petter Selasky 
84d6b92ffaSHans Petter Selasky /****d* Component Library: Pointer Manipulation/offsetof
85d6b92ffaSHans Petter Selasky * NAME
86d6b92ffaSHans Petter Selasky *	offsetof
87d6b92ffaSHans Petter Selasky *
88d6b92ffaSHans Petter Selasky * DESCRIPTION
89d6b92ffaSHans Petter Selasky *	The offsetof macro returns the offset of a member within a structure.
90d6b92ffaSHans Petter Selasky *
91d6b92ffaSHans Petter Selasky * SYNOPSIS
92d6b92ffaSHans Petter Selasky *	uintptr_t
93d6b92ffaSHans Petter Selasky *	offsetof(
94d6b92ffaSHans Petter Selasky *		IN TYPE,
95d6b92ffaSHans Petter Selasky *		IN MEMBER );
96d6b92ffaSHans Petter Selasky *
97d6b92ffaSHans Petter Selasky * PARAMETERS
98d6b92ffaSHans Petter Selasky *	TYPE
99d6b92ffaSHans Petter Selasky *		[in] Name of the structure containing the specified member.
100d6b92ffaSHans Petter Selasky *
101d6b92ffaSHans Petter Selasky *	MEMBER
102d6b92ffaSHans Petter Selasky *		[in] Name of the member whose offset in the specified structure
103d6b92ffaSHans Petter Selasky *		is to be returned.
104d6b92ffaSHans Petter Selasky *
105d6b92ffaSHans Petter Selasky * RETURN VALUE
106d6b92ffaSHans Petter Selasky *	Number of bytes from the beginning of the structure to the
107d6b92ffaSHans Petter Selasky *	specified member.
108d6b92ffaSHans Petter Selasky *
109d6b92ffaSHans Petter Selasky * SEE ALSO
110d6b92ffaSHans Petter Selasky *	PARENT_STRUCT
111d6b92ffaSHans Petter Selasky *********/
112d6b92ffaSHans Petter Selasky #ifndef offsetof
113d6b92ffaSHans Petter Selasky #define offsetof(TYPE, MEMBER) ((uintptr_t) &((TYPE *)0)->MEMBER)
114d6b92ffaSHans Petter Selasky #endif
115d6b92ffaSHans Petter Selasky 
116d6b92ffaSHans Petter Selasky /****d* Component Library: Pointer Manipulation/PARENT_STRUCT
117d6b92ffaSHans Petter Selasky * NAME
118d6b92ffaSHans Petter Selasky *	PARENT_STRUCT
119d6b92ffaSHans Petter Selasky *
120d6b92ffaSHans Petter Selasky * DESCRIPTION
121d6b92ffaSHans Petter Selasky *	The PARENT_STRUCT macro returns a pointer to a structure
122d6b92ffaSHans Petter Selasky *	given a name and pointer to one of its members.
123d6b92ffaSHans Petter Selasky *
124d6b92ffaSHans Petter Selasky * SYNOPSIS
125d6b92ffaSHans Petter Selasky *	PARENT_TYPE*
126d6b92ffaSHans Petter Selasky *	PARENT_STRUCT(
127d6b92ffaSHans Petter Selasky *		IN void* const p_member,
128d6b92ffaSHans Petter Selasky *		IN PARENT_TYPE,
129d6b92ffaSHans Petter Selasky *		IN MEMBER_NAME );
130d6b92ffaSHans Petter Selasky *
131d6b92ffaSHans Petter Selasky * PARAMETERS
132d6b92ffaSHans Petter Selasky *	p_member
133d6b92ffaSHans Petter Selasky *		[in] Pointer to the MEMBER_NAME member of a PARENT_TYPE structure.
134d6b92ffaSHans Petter Selasky *
135d6b92ffaSHans Petter Selasky *	PARENT_TYPE
136d6b92ffaSHans Petter Selasky *		[in] Name of the structure containing the specified member.
137d6b92ffaSHans Petter Selasky *
138d6b92ffaSHans Petter Selasky *	MEMBER_NAME
139d6b92ffaSHans Petter Selasky *		[in] Name of the member whose address is passed in the p_member
140d6b92ffaSHans Petter Selasky *		parameter.
141d6b92ffaSHans Petter Selasky *
142d6b92ffaSHans Petter Selasky * RETURN VALUE
143d6b92ffaSHans Petter Selasky *	Pointer to a structure of type PARENT_TYPE whose MEMBER_NAME member is
144d6b92ffaSHans Petter Selasky *	located at p_member.
145d6b92ffaSHans Petter Selasky *
146d6b92ffaSHans Petter Selasky * SEE ALSO
147d6b92ffaSHans Petter Selasky *	offsetof
148d6b92ffaSHans Petter Selasky *********/
149d6b92ffaSHans Petter Selasky #define PARENT_STRUCT(p_member, PARENT_TYPE, MEMBER_NAME) \
150d6b92ffaSHans Petter Selasky 	((PARENT_TYPE*)((uint8_t*)(p_member) - offsetof(PARENT_TYPE, MEMBER_NAME)))
151d6b92ffaSHans Petter Selasky 
152d6b92ffaSHans Petter Selasky /****d* Component Library/Parameter Keywords
153d6b92ffaSHans Petter Selasky * NAME
154d6b92ffaSHans Petter Selasky *	Parameter Keywords
155d6b92ffaSHans Petter Selasky *
156d6b92ffaSHans Petter Selasky * DESCRIPTION
157d6b92ffaSHans Petter Selasky *	The Parameter Keywords can be used to clarify the usage of function
158d6b92ffaSHans Petter Selasky *	parameters to users.
159d6b92ffaSHans Petter Selasky *
160d6b92ffaSHans Petter Selasky * VALUES
161d6b92ffaSHans Petter Selasky *	IN
162d6b92ffaSHans Petter Selasky *		Designates that the parameter is used as input to a function.
163d6b92ffaSHans Petter Selasky *
164d6b92ffaSHans Petter Selasky *	OUT
165d6b92ffaSHans Petter Selasky *		Designates that the parameter's value will be set by the function.
166d6b92ffaSHans Petter Selasky *
167d6b92ffaSHans Petter Selasky *	OPTIONAL
168d6b92ffaSHans Petter Selasky *		Designates that the parameter is optional, and may be NULL.
169d6b92ffaSHans Petter Selasky *		The OPTIONAL keyword, if used, follows the parameter name.
170d6b92ffaSHans Petter Selasky *
171d6b92ffaSHans Petter Selasky * EXAMPLE
172d6b92ffaSHans Petter Selasky *	// Function declaration.
173d6b92ffaSHans Petter Selasky *	void*
174d6b92ffaSHans Petter Selasky *	my_func(
175d6b92ffaSHans Petter Selasky *	    IN void* const p_param1,
176d6b92ffaSHans Petter Selasky *	    OUT void** const p_handle OPTIONAL );
177d6b92ffaSHans Petter Selasky *
178d6b92ffaSHans Petter Selasky * NOTES
179d6b92ffaSHans Petter Selasky *	Multiple keywords can apply to a single parameter. The IN and OUT
180d6b92ffaSHans Petter Selasky *	keywords precede the parameter type. The OPTIONAL
181d6b92ffaSHans Petter Selasky *	keyword, if used, follows the parameter name.
182d6b92ffaSHans Petter Selasky *********/
183d6b92ffaSHans Petter Selasky #ifndef		IN
184d6b92ffaSHans Petter Selasky #define		IN		/* Function input parameter */
185d6b92ffaSHans Petter Selasky #endif
186d6b92ffaSHans Petter Selasky #ifndef		OUT
187d6b92ffaSHans Petter Selasky #define		OUT		/* Function output parameter */
188d6b92ffaSHans Petter Selasky #endif
189d6b92ffaSHans Petter Selasky #ifndef		OPTIONAL
190d6b92ffaSHans Petter Selasky #define		OPTIONAL	/* Optional function parameter - NULL if not used */
191d6b92ffaSHans Petter Selasky #endif
192d6b92ffaSHans Petter Selasky 
193d6b92ffaSHans Petter Selasky /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
194d6b92ffaSHans Petter Selasky %%                  Function Returns And Completion Codes					 %%
195d6b92ffaSHans Petter Selasky %%																			 %%
196d6b92ffaSHans Petter Selasky %% The text for any addition to this enumerated type must be added to the	 %%
197d6b92ffaSHans Petter Selasky %% string array defined in <cl_statustext.c>.								 %%
198d6b92ffaSHans Petter Selasky %%																			 %%
199d6b92ffaSHans Petter Selasky %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
200d6b92ffaSHans Petter Selasky 
201d6b92ffaSHans Petter Selasky /****d* Component Library/Data Types
202d6b92ffaSHans Petter Selasky * NAME
203d6b92ffaSHans Petter Selasky *	Data Types
204d6b92ffaSHans Petter Selasky *
205d6b92ffaSHans Petter Selasky * DESCRIPTION
206d6b92ffaSHans Petter Selasky *	The component library provides and uses explicitly sized types.
207d6b92ffaSHans Petter Selasky *
208d6b92ffaSHans Petter Selasky * VALUES
209d6b92ffaSHans Petter Selasky *	char
210d6b92ffaSHans Petter Selasky *		8-bit, defined by compiler.
211d6b92ffaSHans Petter Selasky *
212d6b92ffaSHans Petter Selasky *	void
213d6b92ffaSHans Petter Selasky *		0-bit, defined by compiler.
214d6b92ffaSHans Petter Selasky *
215d6b92ffaSHans Petter Selasky *	int8_t
216d6b92ffaSHans Petter Selasky *		8-bit signed integer.
217d6b92ffaSHans Petter Selasky *
218d6b92ffaSHans Petter Selasky *	uint8_t
219d6b92ffaSHans Petter Selasky *		8-bit unsigned integer.
220d6b92ffaSHans Petter Selasky *
221d6b92ffaSHans Petter Selasky *	int16_t
222d6b92ffaSHans Petter Selasky *		16-bit signed integer.
223d6b92ffaSHans Petter Selasky *
224d6b92ffaSHans Petter Selasky *	uint16_t
225d6b92ffaSHans Petter Selasky *		16-bit unsigned integer.
226d6b92ffaSHans Petter Selasky *
227d6b92ffaSHans Petter Selasky *	net16_t
228d6b92ffaSHans Petter Selasky *		16-bit network byte order value.
229d6b92ffaSHans Petter Selasky *
230d6b92ffaSHans Petter Selasky *	int32_t
231d6b92ffaSHans Petter Selasky *		32-bit signed integer.
232d6b92ffaSHans Petter Selasky *
233d6b92ffaSHans Petter Selasky *	uint32_t
234d6b92ffaSHans Petter Selasky *		32-bit unsigned integer.
235d6b92ffaSHans Petter Selasky *
236d6b92ffaSHans Petter Selasky *	net32_t
237d6b92ffaSHans Petter Selasky *		32-bit network byte order value.
238d6b92ffaSHans Petter Selasky *
239d6b92ffaSHans Petter Selasky *	int64_t
240d6b92ffaSHans Petter Selasky *		64-bit signed integer.
241d6b92ffaSHans Petter Selasky *
242d6b92ffaSHans Petter Selasky *	uint64_t
243d6b92ffaSHans Petter Selasky *		64-bit unsigned integer.
244d6b92ffaSHans Petter Selasky *
245d6b92ffaSHans Petter Selasky *	net64_t
246d6b92ffaSHans Petter Selasky *		64-bit network byte order value.
247d6b92ffaSHans Petter Selasky *
248d6b92ffaSHans Petter Selasky *	boolean_t
249d6b92ffaSHans Petter Selasky *		integral sized.  Set to TRUE or FALSE and used in logical expressions.
250d6b92ffaSHans Petter Selasky *
251d6b92ffaSHans Petter Selasky * NOTES
252d6b92ffaSHans Petter Selasky *	Pointer types are not defined as these provide no value and can potentially
253d6b92ffaSHans Petter Selasky *	lead to naming confusion.
254d6b92ffaSHans Petter Selasky *********/
255d6b92ffaSHans Petter Selasky 
256d6b92ffaSHans Petter Selasky /****d* Component Library: Data Types/cl_status_t
257d6b92ffaSHans Petter Selasky * NAME
258d6b92ffaSHans Petter Selasky *	cl_status_t
259d6b92ffaSHans Petter Selasky *
260d6b92ffaSHans Petter Selasky * DESCRIPTION
261d6b92ffaSHans Petter Selasky *	The cl_status_t return types are used by the component library to
262d6b92ffaSHans Petter Selasky *	provide detailed function return values.
263d6b92ffaSHans Petter Selasky *
264d6b92ffaSHans Petter Selasky * SYNOPSIS
265d6b92ffaSHans Petter Selasky */
266d6b92ffaSHans Petter Selasky #define CL_SUCCESS                 0
267d6b92ffaSHans Petter Selasky #define CL_ERROR                   1
268d6b92ffaSHans Petter Selasky #define CL_INVALID_STATE           2
269d6b92ffaSHans Petter Selasky #define CL_INVALID_OPERATION       3
270d6b92ffaSHans Petter Selasky #define CL_INVALID_SETTING         4
271d6b92ffaSHans Petter Selasky #define CL_INVALID_PARAMETER       5
272d6b92ffaSHans Petter Selasky #define CL_INSUFFICIENT_RESOURCES  6
273d6b92ffaSHans Petter Selasky #define CL_INSUFFICIENT_MEMORY     7
274d6b92ffaSHans Petter Selasky #define CL_INVALID_PERMISSION      8
275d6b92ffaSHans Petter Selasky #define CL_COMPLETED               9
276d6b92ffaSHans Petter Selasky #define CL_NOT_DONE               10
277d6b92ffaSHans Petter Selasky #define CL_PENDING                11
278d6b92ffaSHans Petter Selasky #define CL_TIMEOUT                12
279d6b92ffaSHans Petter Selasky #define CL_CANCELED               13
280d6b92ffaSHans Petter Selasky #define CL_REJECT                 14
281d6b92ffaSHans Petter Selasky #define CL_OVERRUN                15
282d6b92ffaSHans Petter Selasky #define CL_NOT_FOUND              16
283d6b92ffaSHans Petter Selasky #define CL_UNAVAILABLE            17
284d6b92ffaSHans Petter Selasky #define CL_BUSY                   18
285d6b92ffaSHans Petter Selasky #define CL_DISCONNECT             19
286d6b92ffaSHans Petter Selasky #define CL_DUPLICATE              20
287d6b92ffaSHans Petter Selasky #define CL_STATUS_COUNT           21 /* should be the last value */
288d6b92ffaSHans Petter Selasky 
289d6b92ffaSHans Petter Selasky typedef int cl_status_t;
290d6b92ffaSHans Petter Selasky /*
291d6b92ffaSHans Petter Selasky * SEE ALSO
292d6b92ffaSHans Petter Selasky *	Data Types, CL_STATUS_MSG
293d6b92ffaSHans Petter Selasky *********/
294d6b92ffaSHans Petter Selasky 
295d6b92ffaSHans Petter Selasky /* Status values above converted to text for easier printing. */
296d6b92ffaSHans Petter Selasky extern const char *cl_status_text[];
297d6b92ffaSHans Petter Selasky 
298d6b92ffaSHans Petter Selasky #ifndef cl_panic
299d6b92ffaSHans Petter Selasky /****f* Component Library: Error Trapping/cl_panic
300d6b92ffaSHans Petter Selasky * NAME
301d6b92ffaSHans Petter Selasky *	cl_panic
302d6b92ffaSHans Petter Selasky *
303d6b92ffaSHans Petter Selasky * DESCRIPTION
304d6b92ffaSHans Petter Selasky *	Halts execution of the current process.  Halts the system if called in
305d6b92ffaSHans Petter Selasky *	from the kernel.
306d6b92ffaSHans Petter Selasky *
307d6b92ffaSHans Petter Selasky * SYNOPSIS
308d6b92ffaSHans Petter Selasky */
309d6b92ffaSHans Petter Selasky void cl_panic(IN const char *const message, IN ...);
310d6b92ffaSHans Petter Selasky /*
311d6b92ffaSHans Petter Selasky * PARAMETERS
312d6b92ffaSHans Petter Selasky *	message
313d6b92ffaSHans Petter Selasky *		[in] ANSI string formatted identically as for a call to the standard C
314d6b92ffaSHans Petter Selasky *		function printf describing the cause for the panic.
315d6b92ffaSHans Petter Selasky *
316d6b92ffaSHans Petter Selasky *	...
317d6b92ffaSHans Petter Selasky *		[in] Extra parameters for string formatting, as defined for the
318d6b92ffaSHans Petter Selasky *		standard C function printf.
319d6b92ffaSHans Petter Selasky *
320d6b92ffaSHans Petter Selasky * RETURN VALUE
321d6b92ffaSHans Petter Selasky *	This function does not return.
322d6b92ffaSHans Petter Selasky *
323d6b92ffaSHans Petter Selasky * NOTES
324d6b92ffaSHans Petter Selasky *	The formatting of the message string is the same as for printf
325d6b92ffaSHans Petter Selasky *
326d6b92ffaSHans Petter Selasky *	cl_panic sends the message to the current message logging target.
327d6b92ffaSHans Petter Selasky *********/
328d6b92ffaSHans Petter Selasky #endif				/* cl_panic */
329d6b92ffaSHans Petter Selasky 
330d6b92ffaSHans Petter Selasky /****d* Component Library: Data Types/CL_STATUS_MSG
331d6b92ffaSHans Petter Selasky * NAME
332d6b92ffaSHans Petter Selasky *	CL_STATUS_MSG
333d6b92ffaSHans Petter Selasky *
334d6b92ffaSHans Petter Selasky * DESCRIPTION
335d6b92ffaSHans Petter Selasky *	The CL_STATUS_MSG macro returns a textual representation of
336d6b92ffaSHans Petter Selasky *	an cl_status_t code.
337d6b92ffaSHans Petter Selasky *
338d6b92ffaSHans Petter Selasky * SYNOPSIS
339d6b92ffaSHans Petter Selasky *	const char*
340d6b92ffaSHans Petter Selasky *	CL_STATUS_MSG(
341d6b92ffaSHans Petter Selasky *		IN cl_status_t errcode );
342d6b92ffaSHans Petter Selasky *
343d6b92ffaSHans Petter Selasky * PARAMETERS
344d6b92ffaSHans Petter Selasky *	errcode
345d6b92ffaSHans Petter Selasky *		[in] cl_status_t code for which to return a text representation.
346d6b92ffaSHans Petter Selasky *
347d6b92ffaSHans Petter Selasky * RETURN VALUE
348d6b92ffaSHans Petter Selasky *	Pointer to a string containing a textual representation of the errcode
349d6b92ffaSHans Petter Selasky *	parameter.
350d6b92ffaSHans Petter Selasky *
351d6b92ffaSHans Petter Selasky * NOTES
352d6b92ffaSHans Petter Selasky *	This function performs boundary checking on the cl_status_t value,
353d6b92ffaSHans Petter Selasky *	masking off the upper 24-bits. If the value is out of bounds, the string
354d6b92ffaSHans Petter Selasky *	"invalid status code" is returned.
355d6b92ffaSHans Petter Selasky *
356d6b92ffaSHans Petter Selasky * SEE ALSO
357d6b92ffaSHans Petter Selasky *	cl_status_t
358d6b92ffaSHans Petter Selasky *********/
359d6b92ffaSHans Petter Selasky #define CL_STATUS_MSG( errcode ) \
360d6b92ffaSHans Petter Selasky 	((errcode < CL_STATUS_COUNT)?cl_status_text[errcode]:"invalid status code")
361d6b92ffaSHans Petter Selasky 
362d6b92ffaSHans Petter Selasky #if !defined( FALSE )
363d6b92ffaSHans Petter Selasky #define FALSE	0
364d6b92ffaSHans Petter Selasky #endif				/* !defined( FALSE ) */
365d6b92ffaSHans Petter Selasky 
366d6b92ffaSHans Petter Selasky #if !defined( TRUE )
367d6b92ffaSHans Petter Selasky #define TRUE	(!FALSE)
368d6b92ffaSHans Petter Selasky #endif				/* !defined( TRUE ) */
369d6b92ffaSHans Petter Selasky 
370d6b92ffaSHans Petter Selasky /****d* Component Library: Unreferenced Parameters/UNUSED_PARAM
371d6b92ffaSHans Petter Selasky * NAME
372d6b92ffaSHans Petter Selasky *	UNUSED_PARAM
373d6b92ffaSHans Petter Selasky *
374d6b92ffaSHans Petter Selasky * DESCRIPTION
375d6b92ffaSHans Petter Selasky *	The UNUSED_PARAM macro can be used to eliminates compiler warnings related
376d6b92ffaSHans Petter Selasky *	to intentionally unused formal parameters in function implementations.
377d6b92ffaSHans Petter Selasky *
378d6b92ffaSHans Petter Selasky * SYNOPSIS
379d6b92ffaSHans Petter Selasky *	UNUSED_PARAM( P )
380d6b92ffaSHans Petter Selasky *
381d6b92ffaSHans Petter Selasky * EXAMPLE
382d6b92ffaSHans Petter Selasky *	void my_func( int32_t value )
383d6b92ffaSHans Petter Selasky *	{
384d6b92ffaSHans Petter Selasky *		UNUSED_PARAM( value );
385d6b92ffaSHans Petter Selasky *	}
386d6b92ffaSHans Petter Selasky *********/
387d6b92ffaSHans Petter Selasky 
388d6b92ffaSHans Petter Selasky /****d* Component Library/Object States
389d6b92ffaSHans Petter Selasky * NAME
390d6b92ffaSHans Petter Selasky *	Object States
391d6b92ffaSHans Petter Selasky *
392d6b92ffaSHans Petter Selasky * DESCRIPTION
393d6b92ffaSHans Petter Selasky *	The object states enumerated type defines the valid states of components.
394d6b92ffaSHans Petter Selasky *
395d6b92ffaSHans Petter Selasky * SYNOPSIS
396d6b92ffaSHans Petter Selasky */
397d6b92ffaSHans Petter Selasky typedef enum _cl_state {
398d6b92ffaSHans Petter Selasky 	CL_UNINITIALIZED = 1,
399d6b92ffaSHans Petter Selasky 	CL_INITIALIZED,
400d6b92ffaSHans Petter Selasky 	CL_DESTROYING,
401d6b92ffaSHans Petter Selasky 	CL_DESTROYED
402d6b92ffaSHans Petter Selasky } cl_state_t;
403d6b92ffaSHans Petter Selasky /*
404d6b92ffaSHans Petter Selasky * VALUES
405d6b92ffaSHans Petter Selasky *	CL_UNINITIALIZED
406d6b92ffaSHans Petter Selasky *		Indicates that initialization was not invoked successfully.
407d6b92ffaSHans Petter Selasky *
408d6b92ffaSHans Petter Selasky *	CL_INITIALIZED
409d6b92ffaSHans Petter Selasky *		Indicates initialization was successful.
410d6b92ffaSHans Petter Selasky *
411d6b92ffaSHans Petter Selasky *	CL_DESTROYING
412d6b92ffaSHans Petter Selasky *		Indicates that the object is undergoing destruction.
413d6b92ffaSHans Petter Selasky *
414d6b92ffaSHans Petter Selasky *	CL_DESTROYED
415d6b92ffaSHans Petter Selasky *		Indicates that the object's destructor has already been called.  Most
416d6b92ffaSHans Petter Selasky *		objects set their final state to CL_DESTROYED before freeing the
417d6b92ffaSHans Petter Selasky *		memory associated with the object.
418d6b92ffaSHans Petter Selasky *********/
419d6b92ffaSHans Petter Selasky 
420d6b92ffaSHans Petter Selasky /****d* Component Library: Object States/cl_is_state_valid
421d6b92ffaSHans Petter Selasky * NAME
422d6b92ffaSHans Petter Selasky *	cl_is_state_valid
423d6b92ffaSHans Petter Selasky *
424d6b92ffaSHans Petter Selasky * DESCRIPTION
425d6b92ffaSHans Petter Selasky *	The cl_is_state_valid function returns whether a state has a valid value.
426d6b92ffaSHans Petter Selasky *
427d6b92ffaSHans Petter Selasky * SYNOPSIS
428d6b92ffaSHans Petter Selasky */
cl_is_state_valid(IN const cl_state_t state)429d6b92ffaSHans Petter Selasky static inline boolean_t cl_is_state_valid(IN const cl_state_t state)
430d6b92ffaSHans Petter Selasky {
431d6b92ffaSHans Petter Selasky 	return ((state == CL_UNINITIALIZED) || (state == CL_INITIALIZED) ||
432d6b92ffaSHans Petter Selasky 		(state == CL_DESTROYING) || (state == CL_DESTROYED));
433d6b92ffaSHans Petter Selasky }
434d6b92ffaSHans Petter Selasky 
435d6b92ffaSHans Petter Selasky /*
436d6b92ffaSHans Petter Selasky * PARAMETERS
437d6b92ffaSHans Petter Selasky *	state
438d6b92ffaSHans Petter Selasky *		State whose value to validate.
439d6b92ffaSHans Petter Selasky *
440d6b92ffaSHans Petter Selasky * RETURN VALUES
441d6b92ffaSHans Petter Selasky *	TRUE if the specified state has a valid value.
442d6b92ffaSHans Petter Selasky *
443d6b92ffaSHans Petter Selasky *	FALSE otherwise.
444d6b92ffaSHans Petter Selasky *
445d6b92ffaSHans Petter Selasky * NOTES
446d6b92ffaSHans Petter Selasky *	This function is used in debug builds to check for valid states.  If an
447d6b92ffaSHans Petter Selasky *	uninitialized object is passed, the memory for the state may cause the
448d6b92ffaSHans Petter Selasky *	state to have an invalid value.
449d6b92ffaSHans Petter Selasky *
450d6b92ffaSHans Petter Selasky * SEE ALSO
451d6b92ffaSHans Petter Selasky *	Object States
452d6b92ffaSHans Petter Selasky *********/
453d6b92ffaSHans Petter Selasky 
454d6b92ffaSHans Petter Selasky END_C_DECLS
455d6b92ffaSHans Petter Selasky #endif				/* _DATA_TYPES_H_ */
456