Lines Matching refs:timer

31  * - timer source based on <kern/thread_call.h>
97 devtimer_valid(devtimer_ref timer)
99 return (timer->dt_callout != NULL);
103 devtimer_retain(devtimer_ref timer)
105 OSIncrementAtomic(&timer->dt_retain_count);
110 devtimer_invalidate(devtimer_ref timer)
112 devtimer_cancel(timer);
113 timer->dt_arg0 = NULL;
114 if (timer->dt_callout != NULL) {
115 thread_call_free(timer->dt_callout);
116 timer->dt_callout = NULL;
122 devtimer_release(devtimer_ref timer)
126 old_retain_count = OSDecrementAtomic(&timer->dt_retain_count);
132 devtimer_invalidate(timer);
133 FREE(timer, M_DEVTIMER);
134 _devtimer_printf("devtimer: timer released\n");
148 devtimer_ref timer = (devtimer_ref)param0;
150 process_func = timer->dt_process_func;
152 (*process_func)(timer, devtimer_process_func_event_lock);
154 timeout_func = timer->dt_timeout_func;
156 timer->dt_timeout_func = NULL;
157 if (timer->dt_generation == generation) {
158 (*timeout_func)(timer->dt_arg0, timer->dt_arg1, timer->dt_arg2);
161 devtimer_release(timer);
163 (*process_func)(timer, devtimer_process_func_event_unlock);
169 devtimer_arg0(devtimer_ref timer)
171 return (timer->dt_arg0);
177 devtimer_ref timer;
179 timer = _MALLOC(sizeof(*timer), M_DEVTIMER, M_WAITOK);
180 if (timer == NULL) {
181 return (timer);
183 bzero(timer, sizeof(*timer));
184 devtimer_retain(timer);
185 timer->dt_callout = thread_call_allocate(devtimer_process, timer);
186 if (timer->dt_callout == NULL) {
188 devtimer_release(timer);
189 timer = NULL;
191 timer->dt_process_func = process_func;
192 timer->dt_arg0 = arg0;
193 return (timer);
197 devtimer_set_absolute(devtimer_ref timer,
202 if (timer->dt_callout == NULL) {
203 printf("devtimer_set_absolute: uninitialized/freed timer\n");
206 devtimer_cancel(timer);
210 timer->dt_timeout_func = timeout_func;
211 timer->dt_arg1 = arg1;
212 timer->dt_arg2 = arg2;
215 timer->dt_generation++;
216 devtimer_retain(timer);
217 thread_call_enter1_delayed(timer->dt_callout,
218 &timer->dt_generation,
224 devtimer_set_relative(devtimer_ref timer,
234 devtimer_set_absolute(timer, abs_time, timeout_func, arg1, arg2);
239 devtimer_cancel(devtimer_ref timer)
241 if (timer->dt_timeout_func != NULL) {
242 timer->dt_timeout_func = NULL;
243 if (timer->dt_callout != NULL) {
244 _devtimer_printf("devtimer: cancelling timer source\n");
245 if (thread_call_cancel(timer->dt_callout)) {
246 devtimer_release(timer);
257 devtimer_enabled(devtimer_ref timer)
259 return (timer->dt_timeout_func != NULL);