|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* This software is available to you under a choice of one of two
|
|
Packit |
13e616 |
* licenses. You may choose to be licensed under the terms of the GNU
|
|
Packit |
13e616 |
* General Public License (GPL) Version 2, available from the file
|
|
Packit |
13e616 |
* COPYING in the main directory of this source tree, or the
|
|
Packit |
13e616 |
* OpenIB.org BSD license below:
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* Redistribution and use in source and binary forms, with or
|
|
Packit |
13e616 |
* without modification, are permitted provided that the following
|
|
Packit |
13e616 |
* conditions are met:
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* - Redistributions of source code must retain the above
|
|
Packit |
13e616 |
* copyright notice, this list of conditions and the following
|
|
Packit |
13e616 |
* disclaimer.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* - Redistributions in binary form must reproduce the above
|
|
Packit |
13e616 |
* copyright notice, this list of conditions and the following
|
|
Packit |
13e616 |
* disclaimer in the documentation and/or other materials
|
|
Packit |
13e616 |
* provided with the distribution.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
Packit |
13e616 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
Packit |
13e616 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
Packit |
13e616 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
Packit |
13e616 |
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
Packit |
13e616 |
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
Packit |
13e616 |
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
Packit |
13e616 |
* SOFTWARE.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* Abstract:
|
|
Packit |
13e616 |
* Declaration of spin lock object.
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#ifndef _CL_SPINLOCK_H_
|
|
Packit |
13e616 |
#define _CL_SPINLOCK_H_
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#include <complib/cl_spinlock_osd.h>
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#ifdef __cplusplus
|
|
Packit |
13e616 |
# define BEGIN_C_DECLS extern "C" {
|
|
Packit |
13e616 |
# define END_C_DECLS }
|
|
Packit |
13e616 |
#else /* !__cplusplus */
|
|
Packit |
13e616 |
# define BEGIN_C_DECLS
|
|
Packit |
13e616 |
# define END_C_DECLS
|
|
Packit |
13e616 |
#endif /* __cplusplus */
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
BEGIN_C_DECLS
|
|
Packit |
13e616 |
/****h* Public/Spinlock
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* Spinlock
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* Spinlock provides synchronization between threads for exclusive access to
|
|
Packit |
13e616 |
* a resource.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* The spinlock functions manipulate a cl_spinlock_t structure which should
|
|
Packit |
13e616 |
* be treated as opaque and should be manipulated only through the provided
|
|
Packit |
13e616 |
* functions.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* Structures:
|
|
Packit |
13e616 |
* cl_spinlock_t
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* Initialization:
|
|
Packit |
13e616 |
* cl_spinlock_construct, cl_spinlock_init, cl_spinlock_destroy
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* Manipulation
|
|
Packit |
13e616 |
* cl_spinlock_acquire, cl_spinlock_release
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
/****f* Component Library: Spinlock/cl_spinlock_construct
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* cl_spinlock_construct
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The cl_spinlock_construct function initializes the state of a
|
|
Packit |
13e616 |
* spin lock.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
void cl_spinlock_construct(IN cl_spinlock_t * const p_spinlock);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_spin_lock
|
|
Packit |
13e616 |
* [in] Pointer to a spin lock structure whose state to initialize.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUE
|
|
Packit |
13e616 |
* This function does not return a value.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Allows calling cl_spinlock_destroy without first calling
|
|
Packit |
13e616 |
* cl_spinlock_init.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* Calling cl_spinlock_construct is a prerequisite to calling any other
|
|
Packit |
13e616 |
* spin lock function except cl_spinlock_init.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* Spinlock, cl_spinlock_init, cl_spinlock_destroy
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* Component Library: Spinlock/cl_spinlock_init
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* cl_spinlock_init
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The cl_spinlock_init function initializes a spin lock for use.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
cl_status_t cl_spinlock_init(IN cl_spinlock_t * const p_spinlock);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_spin_lock
|
|
Packit |
13e616 |
* [in] Pointer to a spin lock structure to initialize.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUES
|
|
Packit |
13e616 |
* CL_SUCCESS if initialization succeeded.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* CL_ERROR if initialization failed. Callers should call
|
|
Packit |
13e616 |
* cl_spinlock_destroy to clean up any resources allocated during
|
|
Packit |
13e616 |
* initialization.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Initialize the spin lock structure. Allows calling cl_spinlock_aquire
|
|
Packit |
13e616 |
* and cl_spinlock_release.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* Spinlock, cl_spinlock_construct, cl_spinlock_destroy,
|
|
Packit |
13e616 |
* cl_spinlock_acquire, cl_spinlock_release
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* Component Library: Spinlock/cl_spinlock_destroy
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* cl_spinlock_destroy
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The cl_spinlock_destroy function performs all necessary cleanup of a
|
|
Packit |
13e616 |
* spin lock.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
void cl_spinlock_destroy(IN cl_spinlock_t * const p_spinlock);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_spin_lock
|
|
Packit |
13e616 |
* [in] Pointer to a spin lock structure to destroy.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUE
|
|
Packit |
13e616 |
* This function does not return a value.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Performs any necessary cleanup of a spin lock. This function must only
|
|
Packit |
13e616 |
* be called if either cl_spinlock_construct or cl_spinlock_init has been
|
|
Packit |
13e616 |
* called.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* Spinlock, cl_spinlock_construct, cl_spinlock_init
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* Component Library: Spinlock/cl_spinlock_acquire
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* cl_spinlock_acquire
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The cl_spinlock_acquire function acquires a spin lock.
|
|
Packit |
13e616 |
* This version of lock does not prevent an interrupt from
|
|
Packit |
13e616 |
* occuring on the processor on which the code is being
|
|
Packit |
13e616 |
* executed.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
void cl_spinlock_acquire(IN cl_spinlock_t * const p_spinlock);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_spin_lock
|
|
Packit |
13e616 |
* [in] Pointer to a spin lock structure to acquire.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUE
|
|
Packit |
13e616 |
* This function does not return a value.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* Spinlock, cl_spinlock_release
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/****f* Component Library: Spinlock/cl_spinlock_release
|
|
Packit |
13e616 |
* NAME
|
|
Packit |
13e616 |
* cl_spinlock_release
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* DESCRIPTION
|
|
Packit |
13e616 |
* The cl_spinlock_release function releases a spin lock object.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SYNOPSIS
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
void cl_spinlock_release(IN cl_spinlock_t * const p_spinlock);
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* PARAMETERS
|
|
Packit |
13e616 |
* p_spin_lock
|
|
Packit |
13e616 |
* [in] Pointer to a spin lock structure to release.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* RETURN VALUE
|
|
Packit |
13e616 |
* This function does not return a value.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* NOTES
|
|
Packit |
13e616 |
* Releases a spin lock after a call to cl_spinlock_acquire.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* SEE ALSO
|
|
Packit |
13e616 |
* Spinlock, cl_spinlock_acquire
|
|
Packit |
13e616 |
*********/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
END_C_DECLS
|
|
Packit |
13e616 |
#endif /* _CL_SPINLOCK_H_ */
|