/*
<:copyright-BRCM:2016:DUAL/GPL:standard

   Broadcom Proprietary and Confidential.(c) 2016 Broadcom
   All Rights Reserved

Unless you and Broadcom execute a separate written software license
agreement governing use of this software, this software is licensed
to you under the terms of the GNU General Public License version 2
(the "GPL"), available at http://www.broadcom.com/licenses/GPLv2.php,
with the following added to such license:

   As a special exception, the copyright holders of this software give
   you permission to link this software with independent modules, and
   to copy and distribute the resulting executable under terms of your
   choice, provided that you also meet, for each linked independent
   module, the terms and conditions of the license of that module.
   An independent module is a module which is not derived from this
   software.  The special exception does not apply to any modifications
   of the software.

Not withstanding the above, under no circumstances may you combine
this software in any way with any other Broadcom software provided
under a license other than the GPL, without Broadcom's express prior
written consent.

:>
 */

/** A write-biased readers-writer lock
 *  NOTE: DO NOT attempt to obtain a write lock on a thread that is already holding a read lock or vice versa - this
 *  will result in a deadlock. Multiple read locks from the same thread are safe, multiple write locks are NOT.
 */
#ifndef BCMOS_RW_LOCK_H_
#define BCMOS_RW_LOCK_H_
#include "bcmos_system.h"

typedef struct bcmos_rw_lock bcmos_rw_lock;

/** Initialize a lock
 *  \param[out] lock    the newly created lock
 *  \return error code
 */
bcmos_errno bcmos_rw_lock_create(bcmos_rw_lock **lock);

/** Obtain a write lock
 *  \param[in] lock     the lock to operate on
 */
void bcmos_rw_write_lock(bcmos_rw_lock* lock);

/** Release a write lock
 *  \param[in] lock     the lock to operate on
 */
void bcmos_rw_write_release(bcmos_rw_lock* lock);

/** Obtain a read lock
 *  \param[in] lock     the lock to operate on
 */
void bcmos_rw_read_lock(bcmos_rw_lock* lock);

/** Release a read lock
 *  \param[in] lock     the lock to operate on
 */
void bcmos_rw_read_release(bcmos_rw_lock* lock);

#endif
