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