75 lines
1.9 KiB
C
Executable File
75 lines
1.9 KiB
C
Executable File
/*
|
|
* Copyright (c) 2016, Xilinx Inc. and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
/*
|
|
* @file condition.h
|
|
* @brief Condition variable for libmetal.
|
|
*/
|
|
|
|
#ifndef __METAL_CONDITION__H__
|
|
#define __METAL_CONDITION__H__
|
|
|
|
#include <metal/mutex.h>
|
|
#include <metal/utilities.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \defgroup condition Condition Variable Interfaces
|
|
* @{
|
|
*/
|
|
|
|
/** Opaque libmetal condition variable data structure. */
|
|
struct metal_condition;
|
|
|
|
/**
|
|
* @brief Initialize a libmetal condition variable.
|
|
* @param[in] cv condition variable to initialize.
|
|
*/
|
|
static inline void metal_condition_init(struct metal_condition *cv);
|
|
|
|
/**
|
|
* @brief Notify one waiter.
|
|
* Before calling this function, the caller
|
|
* should have acquired the mutex.
|
|
* @param[in] cv condition variable
|
|
* @return zero on no errors, non-zero on errors
|
|
* @see metal_condition_wait, metal_condition_broadcast
|
|
*/
|
|
static inline int metal_condition_signal(struct metal_condition *cv);
|
|
|
|
/**
|
|
* @brief Notify all waiters.
|
|
* Before calling this function, the caller
|
|
* should have acquired the mutex.
|
|
* @param[in] cv condition variable
|
|
* @return zero on no errors, non-zero on errors
|
|
* @see metal_condition_wait, metal_condition_signal
|
|
*/
|
|
static inline int metal_condition_broadcast(struct metal_condition *cv);
|
|
|
|
/**
|
|
* @brief Block until the condition variable is notified.
|
|
* Before calling this function, the caller should
|
|
* have acquired the mutex.
|
|
* @param[in] cv condition variable
|
|
* @param[in] m mutex
|
|
* @return 0 on success, non-zero on failure.
|
|
* @see metal_condition_signal
|
|
*/
|
|
int metal_condition_wait(struct metal_condition *cv, metal_mutex_t *m);
|
|
|
|
#include <metal/system/generic/condition.h>
|
|
|
|
/** @} */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __METAL_CONDITION__H__ */
|