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