/* * Copyright (c) 2004, 2005 Voltaire, Inc. All rights reserved. * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved. * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU * General Public License (GPL) Version 2, available from the file * COPYING in the main directory of this source tree, or the * OpenIB.org BSD license below: * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * - Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * - Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. * */ /* * Abstract: * Declaration of timer abstraction. */ #ifndef _CL_TIMER_H_ #define _CL_TIMER_H_ #include #ifdef __cplusplus # define BEGIN_C_DECLS extern "C" { # define END_C_DECLS } #else /* !__cplusplus */ # define BEGIN_C_DECLS # define END_C_DECLS #endif /* __cplusplus */ BEGIN_C_DECLS /****h* Component Library/Timer * NAME * Timer * * DESCRIPTION * The Timer provides the ability to schedule a function to be invoked at * a given time in the future. * * The timer callback function must not perform any blocking operations. * * The timer functions operate on a cl_timer_t structure which should be * treated as opaque and should be manipulated only through the provided * functions. * * SEE ALSO * Structures: * cl_timer_t * * Callbacks: * cl_pfn_timer_callback_t * * Initialization: * cl_timer_construct, cl_timer_init, cl_timer_destroy * * Manipulation: * cl_timer_start, cl_timer_stop *********/ /****d* Component Library: Timer/cl_pfn_timer_callback_t * NAME * cl_pfn_timer_callback_t * * DESCRIPTION * The cl_pfn_timer_callback_t function type defines the prototype for * functions used to notify users of a timer expiration. * * SYNOPSIS */ typedef void (*cl_pfn_timer_callback_t) (IN void *context); /* * PARAMETERS * context * [in] Value specified in a previous call to cl_timer_init. * * RETURN VALUE * This function does not return a value. * * NOTES * This function type is provided as function prototype reference for the * function provided by users as a parameter to the cl_timer_init function. * * SEE ALSO * Timer, cl_timer_init *********/ /* * This include file defines the timer structure, and depends on the timer * callback definition. */ #include /****f* Component Library: Timer/cl_timer_construct * NAME * cl_timer_construct * * DESCRIPTION * The cl_timer_construct function initializes the state of a timer. * * SYNOPSIS */ void cl_timer_construct(IN cl_timer_t * const p_timer); /* * PARAMETERS * p_timer * [in] Pointer to a cl_timer_t structure whose state to initialize. * * RETURN VALUE * This function does not return a value. * * NOTES * Allows calling cl_timer_destroy without first calling cl_timer_init. * * Calling cl_timer_construct is a prerequisite to calling any other * timer function except cl_timer_init. * * SEE ALSO * Timer, cl_timer_init, cl_timer_destroy *********/ /****f* Component Library: Timer/cl_timer_init * NAME * cl_timer_init * * DESCRIPTION * The cl_timer_init function initializes a timer for use. * * SYNOPSIS */ cl_status_t cl_timer_init(IN cl_timer_t * const p_timer, IN cl_pfn_timer_callback_t pfn_callback, IN const void *const context); /* * PARAMETERS * p_timer * [in] Pointer to a cl_timer_t structure to initialize. * * pfn_callback * [in] Address of a callback function to be invoked when a timer expires. * See the cl_pfn_timer_callback_t function type definition for details * about the callback function. * * context * [in] Value to pass to the callback function. * * RETURN VALUES * CL_SUCCESS if the timer was successfully initialized. * * CL_ERROR otherwise. * * NOTES * Allows calling cl_timer_start and cl_timer_stop. * * SEE ALSO * Timer, cl_timer_construct, cl_timer_destroy, cl_timer_start, * cl_timer_stop, cl_pfn_timer_callback_t *********/ /****f* Component Library: Timer/cl_timer_destroy * NAME * cl_timer_destroy * * DESCRIPTION * The cl_timer_destroy function performs any necessary cleanup of a timer. * * SYNOPSIS */ void cl_timer_destroy(IN cl_timer_t * const p_timer); /* * PARAMETERS * p_timer * [in] Pointer to a cl_timer_t structure to destroy. * * RETURN VALUE * This function does not return a value. * * NOTES * cl_timer_destroy cancels any pending callbacks. * * This function should only be called after a call to cl_timer_construct * or cl_timer_init. * * SEE ALSO * Timer, cl_timer_construct, cl_timer_init *********/ /****f* Component Library: Timer/cl_timer_start * NAME * cl_timer_start * * DESCRIPTION * The cl_timer_start function sets a timer to expire after a given interval. * * SYNOPSIS */ cl_status_t cl_timer_start(IN cl_timer_t * const p_timer, IN const uint32_t time_ms); /* * PARAMETERS * p_timer * [in] Pointer to a cl_timer_t structure to schedule. * * time_ms * [in] Time, in milliseconds, before the timer should expire. * * RETURN VALUES * CL_SUCCESS if the timer was successfully scheduled. * * CL_ERROR otherwise. * * NOTES * cl_timer_start implicitly stops the timer before being scheduled. * * The interval specified by the time_ms parameter is a minimum interval. * The timer is guaranteed to expire no sooner than the desired interval, but * may take longer to expire. * * SEE ALSO * Timer, cl_timer_stop, cl_timer_trim *********/ /****f* Component Library: Timer/cl_timer_stop * NAME * cl_timer_stop * * DESCRIPTION * The cl_timer_stop function stops a pending timer from expiring. * * SYNOPSIS */ void cl_timer_stop(IN cl_timer_t * const p_timer); /* * PARAMETERS * p_timer * [in] Pointer to a cl_timer_t structure. * * RETURN VALUE * This function does not return a value. * * SEE ALSO * Timer, cl_timer_start, cl_timer_trim *********/ /****f* Component Library: Timer/cl_timer_trim * NAME * cl_timer_trim * * DESCRIPTION * The cl_timer_trim function pulls in the absolute expiration * time of a timer if the current expiration time exceeds the specified * interval. * * sets a timer to expire after a given * interval if that interval is less than the current timer expiration. * * SYNOPSIS */ cl_status_t cl_timer_trim(IN cl_timer_t * const p_timer, IN const uint32_t time_ms); /* * PARAMETERS * p_timer * [in] Pointer to a cl_timer_t structure to schedule. * * time_ms * [in] Maximum time, in milliseconds, before the timer should expire. * * RETURN VALUES * CL_SUCCESS if the timer was successfully scheduled. * * CL_ERROR otherwise. * * NOTES * cl_timer_trim has no effect if the time interval is greater than the * remaining time when the timer is set. * * If the new interval time is less than the remaining time, cl_timer_trim * implicitly stops the timer before resetting it. * * If the timer is reset, it is guaranteed to expire no sooner than the * new interval, but may take longer to expire. * * SEE ALSO * Timer, cl_timer_start, cl_timer_stop *********/ /****f* Component Library: Time Stamp/cl_get_time_stamp * NAME * cl_get_time_stamp * * DESCRIPTION * The cl_get_time_stamp function returns the current time stamp in * microseconds since the system was booted. * * SYNOPSIS */ uint64_t cl_get_time_stamp(void); /* * RETURN VALUE * Time elapsed, in microseconds, since the system was booted. * * SEE ALSO * Timer, cl_get_time_stamp_sec *********/ /****f* Component Library: Time Stamp/cl_get_time_stamp_sec * NAME * cl_get_time_stamp_sec * * DESCRIPTION * The cl_get_time_stamp_sec function returns the current time stamp in * seconds since the system was booted. * * SYNOPSIS */ uint32_t cl_get_time_stamp_sec(void); /* * RETURN VALUE * Time elapsed, in seconds, since the system was booted. * * SEE ALSO * Timer, cl_get_time_stamp *********/ END_C_DECLS #endif /* _CL_TIMER_H_ */