Lines Matching refs:work

53     struct rt_work      *work;  in _workqueue_thread_entry()  local
57 void (*work_func)(struct rt_work *work, void *work_data); in _workqueue_thread_entry()
72 work = rt_list_entry(queue->delayed_list.next, struct rt_work, list); in _workqueue_thread_entry()
73 if ((current_tick - work->timeout_tick) < RT_TICK_MAX / 2) in _workqueue_thread_entry()
75 rt_list_remove(&(work->list)); in _workqueue_thread_entry()
76 rt_list_insert_after(queue->work_list.prev, &(work->list)); in _workqueue_thread_entry()
77 work->flags &= ~RT_WORK_STATE_SUBMITTING; in _workqueue_thread_entry()
78 work->flags |= RT_WORK_STATE_PENDING; in _workqueue_thread_entry()
82 delay_tick = work->timeout_tick - current_tick; in _workqueue_thread_entry()
96 work = rt_list_entry(queue->work_list.next, struct rt_work, list); in _workqueue_thread_entry()
97 rt_list_remove(&(work->list)); in _workqueue_thread_entry()
98 queue->work_current = work; in _workqueue_thread_entry()
99 work->flags &= ~RT_WORK_STATE_PENDING; in _workqueue_thread_entry()
100 work->workqueue = RT_NULL; in _workqueue_thread_entry()
101 work_func = work->work_func; in _workqueue_thread_entry()
102 work_data = work->work_data; in _workqueue_thread_entry()
106 work_func(work, work_data); in _workqueue_thread_entry()
116 struct rt_work *work, rt_tick_t ticks) in _workqueue_submit_work() argument
125 rt_list_remove(&(work->list)); in _workqueue_submit_work()
126 work->flags = 0; in _workqueue_submit_work()
130 rt_list_insert_after(queue->work_list.prev, &(work->list)); in _workqueue_submit_work()
131 work->flags |= RT_WORK_STATE_PENDING; in _workqueue_submit_work()
132 work->workqueue = queue; in _workqueue_submit_work()
140 work->flags |= RT_WORK_STATE_SUBMITTING; in _workqueue_submit_work()
141 work->workqueue = queue; in _workqueue_submit_work()
142 work->timeout_tick = rt_tick_get() + ticks; in _workqueue_submit_work()
149 if ((work_tmp->timeout_tick - work->timeout_tick) < RT_TICK_MAX / 2) in _workqueue_submit_work()
155 rt_list_insert_before(list_tmp, &(work->list)); in _workqueue_submit_work()
168 static rt_err_t _workqueue_cancel_work(struct rt_workqueue *queue, struct rt_work *work) in _workqueue_cancel_work() argument
174 rt_list_remove(&(work->list)); in _workqueue_cancel_work()
175 work->flags = 0; in _workqueue_cancel_work()
176 err = queue->work_current != work ? RT_EOK : -RT_EBUSY; in _workqueue_cancel_work()
177 work->workqueue = RT_NULL; in _workqueue_cancel_work()
191 void rt_work_init(struct rt_work *work, in rt_work_init() argument
192 void (*work_func)(struct rt_work *work, void *work_data), in rt_work_init() argument
195 RT_ASSERT(work != RT_NULL); in rt_work_init()
198 rt_list_init(&(work->list)); in rt_work_init()
199 work->work_func = work_func; in rt_work_init()
200 work->work_data = work_data; in rt_work_init()
201 work->workqueue = RT_NULL; in rt_work_init()
202 work->flags = 0; in rt_work_init()
203 work->type = 0; in rt_work_init()
275 rt_err_t rt_workqueue_dowork(struct rt_workqueue *queue, struct rt_work *work) in rt_workqueue_dowork() argument
278 RT_ASSERT(work != RT_NULL); in rt_workqueue_dowork()
280 return _workqueue_submit_work(queue, work, 0); in rt_workqueue_dowork()
297 rt_err_t rt_workqueue_submit_work(struct rt_workqueue *queue, struct rt_work *work, rt_tick_t ticks) in rt_workqueue_submit_work() argument
300 RT_ASSERT(work != RT_NULL); in rt_workqueue_submit_work()
303 return _workqueue_submit_work(queue, work, ticks); in rt_workqueue_submit_work()
315 rt_err_t rt_workqueue_urgent_work(struct rt_workqueue *queue, struct rt_work *work) in rt_workqueue_urgent_work() argument
320 RT_ASSERT(work != RT_NULL); in rt_workqueue_urgent_work()
324 rt_list_remove(&(work->list)); in rt_workqueue_urgent_work()
325 rt_list_insert_after(&queue->work_list, &(work->list)); in rt_workqueue_urgent_work()
343 rt_err_t rt_workqueue_cancel_work(struct rt_workqueue *queue, struct rt_work *work) in rt_workqueue_cancel_work() argument
345 RT_ASSERT(work != RT_NULL); in rt_workqueue_cancel_work()
348 return _workqueue_cancel_work(queue, work); in rt_workqueue_cancel_work()
360 rt_err_t rt_workqueue_cancel_work_sync(struct rt_workqueue *queue, struct rt_work *work) in rt_workqueue_cancel_work_sync() argument
363 RT_ASSERT(work != RT_NULL); in rt_workqueue_cancel_work_sync()
365 if (queue->work_current == work) /* it's current work in the queue */ in rt_workqueue_cancel_work_sync()
373 _workqueue_cancel_work(queue, work); in rt_workqueue_cancel_work_sync()
388 struct rt_work *work; in rt_workqueue_cancel_all_work() local
396 work = rt_list_first_entry(&queue->work_list, struct rt_work, list); in rt_workqueue_cancel_all_work()
397 _workqueue_cancel_work(queue, work); in rt_workqueue_cancel_all_work()
402 work = rt_list_first_entry(&queue->delayed_list, struct rt_work, list); in rt_workqueue_cancel_all_work()
403 _workqueue_cancel_work(queue, work); in rt_workqueue_cancel_all_work()
426 rt_err_t rt_work_submit(struct rt_work *work, rt_tick_t ticks) in rt_work_submit() argument
428 return rt_workqueue_submit_work(sys_workq, work, ticks); in rt_work_submit()
438 rt_err_t rt_work_urgent(struct rt_work *work) in rt_work_urgent() argument
440 return rt_workqueue_urgent_work(sys_workq, work); in rt_work_urgent()
451 rt_err_t rt_work_cancel(struct rt_work *work) in rt_work_cancel() argument
453 return rt_workqueue_cancel_work(sys_workq, work); in rt_work_cancel()