11bd4fe43Sopenharmony_ci/* 21bd4fe43Sopenharmony_ci * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 61bd4fe43Sopenharmony_ci * 71bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 131bd4fe43Sopenharmony_ci * limitations under the License. 141bd4fe43Sopenharmony_ci */ 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci#ifndef __HI_QUEUE_H__ 171bd4fe43Sopenharmony_ci#define __HI_QUEUE_H__ 181bd4fe43Sopenharmony_ci#include "hi_types.h" 191bd4fe43Sopenharmony_ci#include <linux/workqueue.h> 201bd4fe43Sopenharmony_ci 211bd4fe43Sopenharmony_ci#ifdef __cplusplus 221bd4fe43Sopenharmony_ci#if __cplusplus 231bd4fe43Sopenharmony_ciextern "C" { 241bd4fe43Sopenharmony_ci#endif 251bd4fe43Sopenharmony_ci#endif 261bd4fe43Sopenharmony_ci 271bd4fe43Sopenharmony_citypedef hi_void (*work_func)(struct work_struct *); 281bd4fe43Sopenharmony_citypedef struct workqueue_struct hi_workqueue; 291bd4fe43Sopenharmony_citypedef struct work_struct hi_work; 301bd4fe43Sopenharmony_citypedef struct delayed_work hi_delayed_work; /* struct delay_work wrap struct work_struct */ 311bd4fe43Sopenharmony_ci 321bd4fe43Sopenharmony_ci/* create workqueue. */ 331bd4fe43Sopenharmony_ciinline hi_workqueue *hi_workqueue_create(char *workqueue_name) 341bd4fe43Sopenharmony_ci{ 351bd4fe43Sopenharmony_ci return create_workqueue(workqueue_name); 361bd4fe43Sopenharmony_ci} 371bd4fe43Sopenharmony_ci 381bd4fe43Sopenharmony_ci/* destroy workqueue. */ 391bd4fe43Sopenharmony_ciinline hi_void hi_workqueue_destroy(hi_workqueue *workqueue) 401bd4fe43Sopenharmony_ci{ 411bd4fe43Sopenharmony_ci destroy_workqueue(workqueue); 421bd4fe43Sopenharmony_ci} 431bd4fe43Sopenharmony_ci 441bd4fe43Sopenharmony_ci/* init work. */ 451bd4fe43Sopenharmony_ciinline hi_void hi_workqueue_init_work(hi_work *work, work_func func) 461bd4fe43Sopenharmony_ci{ 471bd4fe43Sopenharmony_ci INIT_WORK(work, func); 481bd4fe43Sopenharmony_ci} 491bd4fe43Sopenharmony_ci 501bd4fe43Sopenharmony_ci/* add work to workqueue. */ 511bd4fe43Sopenharmony_ciinline hi_s32 hi_workqueue_add_work(hi_workqueue *workqueue, hi_work *work) 521bd4fe43Sopenharmony_ci{ 531bd4fe43Sopenharmony_ci return queue_work(workqueue, work); 541bd4fe43Sopenharmony_ci} 551bd4fe43Sopenharmony_ci 561bd4fe43Sopenharmony_ci/* cancle work from workqueue. */ 571bd4fe43Sopenharmony_ciinline hi_bool hi_workqueue_cancle_work_sync(hi_work *work) 581bd4fe43Sopenharmony_ci{ 591bd4fe43Sopenharmony_ci return cancel_work_sync(work); 601bd4fe43Sopenharmony_ci} 611bd4fe43Sopenharmony_ci 621bd4fe43Sopenharmony_ci/* judge work is working. */ 631bd4fe43Sopenharmony_ciinline hi_bool hi_workqueue_is_busy(hi_work *work) 641bd4fe43Sopenharmony_ci{ 651bd4fe43Sopenharmony_ci return work_busy(work); 661bd4fe43Sopenharmony_ci} 671bd4fe43Sopenharmony_ci 681bd4fe43Sopenharmony_ci/* init delayed work. */ 691bd4fe43Sopenharmony_ciinline hi_void hi_workqueue_init_delayed_work(hi_delayed_work *delayed_work, work_func func) 701bd4fe43Sopenharmony_ci{ 711bd4fe43Sopenharmony_ci init_delayed_work(delayed_work, func); 721bd4fe43Sopenharmony_ci} 731bd4fe43Sopenharmony_ci 741bd4fe43Sopenharmony_ci/* add delay work to workqueue. */ 751bd4fe43Sopenharmony_ciinline hi_s32 hi_workqueue_add_delayed_work(hi_workqueue *workqueue, hi_delayed_work *delayed_work, hi_u32 delay) 761bd4fe43Sopenharmony_ci{ 771bd4fe43Sopenharmony_ci return queue_delayed_work(workqueue, delayed_work, delay); 781bd4fe43Sopenharmony_ci} 791bd4fe43Sopenharmony_ci 801bd4fe43Sopenharmony_ci/* cancle delayed work to workqueue. */ 811bd4fe43Sopenharmony_ciinline hi_bool hi_workqueue_cancle_delayed_work_sync(hi_delayed_work *delayed_work) 821bd4fe43Sopenharmony_ci{ 831bd4fe43Sopenharmony_ci return cancel_delayed_work_sync(delayed_work); 841bd4fe43Sopenharmony_ci} 851bd4fe43Sopenharmony_ci 861bd4fe43Sopenharmony_ci#ifdef __cplusplus 871bd4fe43Sopenharmony_ci#if __cplusplus 881bd4fe43Sopenharmony_ci} 891bd4fe43Sopenharmony_ci#endif 901bd4fe43Sopenharmony_ci#endif 911bd4fe43Sopenharmony_ci 921bd4fe43Sopenharmony_ci#endif /* end of hi_workqueue.h */ 93