]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/ofed/opensm/include/complib/cl_spinlock.h
Import tzdata 2018c
[FreeBSD/FreeBSD.git] / contrib / ofed / opensm / include / complib / cl_spinlock.h
1 /*
2  * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
3  * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
4  * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
5  *
6  * This software is available to you under a choice of one of two
7  * licenses.  You may choose to be licensed under the terms of the GNU
8  * General Public License (GPL) Version 2, available from the file
9  * COPYING in the main directory of this source tree, or the
10  * OpenIB.org BSD license below:
11  *
12  *     Redistribution and use in source and binary forms, with or
13  *     without modification, are permitted provided that the following
14  *     conditions are met:
15  *
16  *      - Redistributions of source code must retain the above
17  *        copyright notice, this list of conditions and the following
18  *        disclaimer.
19  *
20  *      - Redistributions in binary form must reproduce the above
21  *        copyright notice, this list of conditions and the following
22  *        disclaimer in the documentation and/or other materials
23  *        provided with the distribution.
24  *
25  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
26  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
29  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
30  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
31  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32  * SOFTWARE.
33  *
34  */
35
36 /*
37  * Abstract:
38  *      Declaration of spin lock object.
39  */
40
41 #ifndef _CL_SPINLOCK_H_
42 #define _CL_SPINLOCK_H_
43
44 #include <complib/cl_spinlock_osd.h>
45
46 #ifdef __cplusplus
47 #  define BEGIN_C_DECLS extern "C" {
48 #  define END_C_DECLS   }
49 #else                           /* !__cplusplus */
50 #  define BEGIN_C_DECLS
51 #  define END_C_DECLS
52 #endif                          /* __cplusplus */
53
54 BEGIN_C_DECLS
55 /****h* Public/Spinlock
56 * NAME
57 *       Spinlock
58 *
59 * DESCRIPTION
60 *       Spinlock provides synchronization between threads for exclusive access to
61 *       a resource.
62 *
63 *       The spinlock functions manipulate a cl_spinlock_t structure which should
64 *       be treated as opaque and should be manipulated only through the provided
65 *       functions.
66 *
67 * SEE ALSO
68 *       Structures:
69 *               cl_spinlock_t
70 *
71 *       Initialization:
72 *               cl_spinlock_construct, cl_spinlock_init, cl_spinlock_destroy
73 *
74 *       Manipulation
75 *               cl_spinlock_acquire, cl_spinlock_release
76 *********/
77 /****f* Component Library: Spinlock/cl_spinlock_construct
78 * NAME
79 *       cl_spinlock_construct
80 *
81 * DESCRIPTION
82 *       The cl_spinlock_construct function initializes the state of a
83 *       spin lock.
84 *
85 * SYNOPSIS
86 */
87 void cl_spinlock_construct(IN cl_spinlock_t * const p_spinlock);
88 /*
89 * PARAMETERS
90 *       p_spin_lock
91 *               [in] Pointer to a spin lock structure whose state to initialize.
92 *
93 * RETURN VALUE
94 *       This function does not return a value.
95 *
96 * NOTES
97 *       Allows calling cl_spinlock_destroy without first calling
98 *       cl_spinlock_init.
99 *
100 *       Calling cl_spinlock_construct is a prerequisite to calling any other
101 *       spin lock function except cl_spinlock_init.
102 *
103 * SEE ALSO
104 *       Spinlock, cl_spinlock_init, cl_spinlock_destroy
105 *********/
106
107 /****f* Component Library: Spinlock/cl_spinlock_init
108 * NAME
109 *       cl_spinlock_init
110 *
111 * DESCRIPTION
112 *       The cl_spinlock_init function initializes a spin lock for use.
113 *
114 * SYNOPSIS
115 */
116 cl_status_t cl_spinlock_init(IN cl_spinlock_t * const p_spinlock);
117 /*
118 * PARAMETERS
119 *       p_spin_lock
120 *               [in] Pointer to a spin lock structure to initialize.
121 *
122 * RETURN VALUES
123 *       CL_SUCCESS if initialization succeeded.
124 *
125 *       CL_ERROR if initialization failed. Callers should call
126 *       cl_spinlock_destroy to clean up any resources allocated during
127 *       initialization.
128 *
129 * NOTES
130 *       Initialize the spin lock structure. Allows calling cl_spinlock_aquire
131 *       and cl_spinlock_release.
132 *
133 * SEE ALSO
134 *       Spinlock, cl_spinlock_construct, cl_spinlock_destroy,
135 *       cl_spinlock_acquire, cl_spinlock_release
136 *********/
137
138 /****f* Component Library: Spinlock/cl_spinlock_destroy
139 * NAME
140 *       cl_spinlock_destroy
141 *
142 * DESCRIPTION
143 *       The cl_spinlock_destroy function performs all necessary cleanup of a
144 *       spin lock.
145 *
146 * SYNOPSIS
147 */
148 void cl_spinlock_destroy(IN cl_spinlock_t * const p_spinlock);
149 /*
150 * PARAMETERS
151 *       p_spin_lock
152 *               [in] Pointer to a spin lock structure to destroy.
153 *
154 * RETURN VALUE
155 *       This function does not return a value.
156 *
157 * NOTES
158 *       Performs any necessary cleanup of a spin lock. This function must only
159 *       be called if either cl_spinlock_construct or cl_spinlock_init has been
160 *       called.
161 *
162 * SEE ALSO
163 *       Spinlock, cl_spinlock_construct, cl_spinlock_init
164 *********/
165
166 /****f* Component Library: Spinlock/cl_spinlock_acquire
167 * NAME
168 *       cl_spinlock_acquire
169 *
170 * DESCRIPTION
171 *       The cl_spinlock_acquire function acquires a spin lock.
172 *       This version of lock does not prevent an interrupt from
173 *       occuring on the processor on which the code is being
174 *       executed.
175 *
176 * SYNOPSIS
177 */
178 void cl_spinlock_acquire(IN cl_spinlock_t * const p_spinlock);
179 /*
180 * PARAMETERS
181 *       p_spin_lock
182 *               [in] Pointer to a spin lock structure to acquire.
183 *
184 * RETURN VALUE
185 *       This function does not return a value.
186 *
187 * SEE ALSO
188 *       Spinlock, cl_spinlock_release
189 *********/
190
191 /****f* Component Library: Spinlock/cl_spinlock_release
192 * NAME
193 *       cl_spinlock_release
194 *
195 * DESCRIPTION
196 *       The cl_spinlock_release function releases a spin lock object.
197 *
198 * SYNOPSIS
199 */
200 void cl_spinlock_release(IN cl_spinlock_t * const p_spinlock);
201 /*
202 * PARAMETERS
203 *       p_spin_lock
204 *               [in] Pointer to a spin lock structure to release.
205 *
206 * RETURN VALUE
207 *       This function does not return a value.
208 *
209 * NOTES
210 *       Releases a spin lock after a call to cl_spinlock_acquire.
211 *
212 * SEE ALSO
213 *       Spinlock, cl_spinlock_acquire
214 *********/
215
216 END_C_DECLS
217 #endif                          /* _CL_SPINLOCK_H_ */