1129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* Copyright (c) 2013,2015 The Linux Foundation. All rights reserved. 2129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * 3129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * Redistribution and use in source and binary forms, with or without 4129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * modification, are permitted provided that the following conditions are 5129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * met: 6129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * * Redistributions of source code must retain the above copyright 7129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * notice, this list of conditions and the following disclaimer. 8129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * * Redistributions in binary form must reproduce the above 9129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * copyright notice, this list of conditions and the following 10129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * disclaimer in the documentation and/or other materials provided 11129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * with the distribution. 12129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * * Neither the name of The Linux Foundation, nor the names of its 13129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * contributors may be used to endorse or promote products derived 14129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * from this software without specific prior written permission. 15129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * 16129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel * 28129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel */ 29129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 30129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifndef __LOC_DELAY_H__ 31129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#define __LOC_DELAY_H__ 32129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 33129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifdef __cplusplus 34129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelextern "C" { 35129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif /* __cplusplus */ 36129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <stddef.h> 37129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#include <platform_lib_includes.h> 38129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* 39129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel user_data: client context pointer, passthrough. Originally received 40129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel from calling client when loc_timer_start() is called. 41129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel result: 0 if timer successfully timed out; else timer failed. 42129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel*/ 43129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudeltypedef void (*loc_timer_callback)(void *user_data, int32_t result); 44129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 45129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 46129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* 47129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel delay_msec: timeout value for the timer. 48129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel cb_func: callback function pointer, implemented by client. 49129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Can not be NULL. 50129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel user_data: client context pointer, passthrough. Will be 51129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel returned when loc_timer_callback() is called. 52129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel wakeOnExpire: true if to wake up CPU (if sleeping) upon timer 53129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel expiration and notify the client. 54129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel false if to wait until next time CPU wakes up (if 55129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel sleeping) and then notify the client. 56129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel Returns the handle, which can be used to stop the timer 57129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel NULL, if timer start fails (e.g. if cb_func is NULL). 58129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel*/ 59129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelvoid* loc_timer_start(uint64_t delay_msec, 60129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel loc_timer_callback cb_func, 61129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel void *user_data, 62129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel bool wake_on_expire=false); 63129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 64129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel/* 65129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel handle becomes invalid upon the return of the callback 66129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel*/ 67129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudelvoid loc_timer_stop(void*& handle); 68129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 69129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#ifdef __cplusplus 70129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel} 71129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif /* __cplusplus */ 72129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel 73129edaf7d0025e2828a8bee025f7b1bac7a68da6Thierry Strudel#endif //__LOC_DELAY_H__ 74