1e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Copyright (c) 2013,2015 The Linux Foundation. All rights reserved.
2e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
3e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * Redistribution and use in source and binary forms, with or without
4e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * modification, are permitted provided that the following conditions are
5e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * met:
6e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Redistributions of source code must retain the above copyright
7e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       notice, this list of conditions and the following disclaimer.
8e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Redistributions in binary form must reproduce the above
9e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       copyright notice, this list of conditions and the following
10e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       disclaimer in the documentation and/or other materials provided
11e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       with the distribution.
12e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Neither the name of The Linux Foundation, nor the names of its
13e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       contributors may be used to endorse or promote products derived
14e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       from this software without specific prior written permission.
15e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
16e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
28e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti */
29e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
30e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifndef __LOC_DELAY_H__
31e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define __LOC_DELAY_H__
32e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
33e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifdef __cplusplus
34e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiextern "C" {
35e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* __cplusplus */
36e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <stddef.h>
37e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
38e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*
39e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    user_data: client context pointer, passthrough. Originally received
40e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti               from calling client when loc_timer_start() is called.
41e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    result:    0 if timer successfully timed out; else timer failed.
42e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti*/
43e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletitypedef void (*loc_timer_callback)(void *user_data, int32_t result);
44e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
45e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
46e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*
47e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    delay_msec:         timeout value for the timer.
48e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    cb_func:            callback function pointer, implemented by client.
49e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        Can not be NULL.
50e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    user_data:          client context pointer, passthrough.  Will be
51e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        returned when loc_timer_callback() is called.
52e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    wakeOnExpire:       true if to wake up CPU (if sleeping) upon timer
53e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                expiration and notify the client.
54e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        false if to wait until next time CPU wakes up (if
55e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                 sleeping) and then notify the client.
56e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    Returns the handle, which can be used to stop the timer
57e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        NULL, if timer start fails (e.g. if cb_func is NULL).
58e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti*/
59e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid* loc_timer_start(uint64_t delay_msec,
60e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      loc_timer_callback cb_func,
61e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      void *user_data,
62e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      bool wake_on_expire=false);
63e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
64e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*
65e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    handle becomes invalid upon the return of the callback
66e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti*/
67e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid loc_timer_stop(void*& handle);
68e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
69e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifdef __cplusplus
70e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
71e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* __cplusplus */
72e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
73e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif //__LOC_DELAY_H__
74