luckfox-pico-sdk/sysdrv/drv_ko/wifi/hichannel/oal/oal_workqueue.h
2023-08-08 20:36:47 +08:00

134 lines
4.7 KiB
C

/*
* Copyright (c) Hisilicon Technologies Co., Ltd. 2020-2020. All rights reserved.
* Description: oal_workqueue.h 的头文件
* Author: Hisilicon
* Create: 2020-08-04
*/
#ifndef __OAL_LINUX_WORKQUEUE_H__
#define __OAL_LINUX_WORKQUEUE_H__
/*****************************************************************************
1 其他头文件包含
*****************************************************************************/
#include <linux/proc_fs.h>
#include <asm/uaccess.h>
#include <linux/interrupt.h>
#include <linux/sched.h>
#include <linux/workqueue.h>
#include "hi_types.h"
#include "oal_util.h"
#ifdef __cplusplus
#if __cplusplus
extern "C" {
#endif
#endif
/*****************************************************************************
2 STRUCT定义
*****************************************************************************/
typedef struct workqueue_struct oal_workqueue_stru;
typedef struct work_struct oal_work_stru;
typedef struct delayed_work oal_delayed_work;
/*****************************************************************************
7 宏定义
*****************************************************************************/
#define oal_init_work(_p_work, _p_func) INIT_WORK(_p_work, _p_func)
#define oal_init_delayed_work(_work, _func) INIT_DELAYED_WORK(_work, _func)
#define oal_create_singlethread_workqueue_macro(_name) create_singlethread_workqueue(_name)
#define oal_create_workqueue(name) create_workqueue(name)
/* inline 函数定义 */
/*****************************************************************************
功能描述 : 创建一个单线程的工作队列
输入参数 : 无
输出参数 : 无
返 回 值 :
*****************************************************************************/
static inline oal_workqueue_stru* oal_create_singlethread_workqueue(hi_char *pc_workqueue_name)
{
return create_singlethread_workqueue(pc_workqueue_name);
}
/*****************************************************************************
功能描述 : 销毁工作队列
输入参数 : 无
输出参数 : 无
返 回 值 :
*****************************************************************************/
static inline hi_void oal_destroy_workqueue(oal_workqueue_stru *pst_workqueue)
{
destroy_workqueue(pst_workqueue);
}
/*****************************************************************************
功能描述 : 添加一个任务到工作队列
输入参数 : 无
输出参数 : 无
返 回 值 :
*****************************************************************************/
static inline hi_u32 oal_queue_work(oal_workqueue_stru *pst_workqueue, oal_work_stru *pst_work)
{
return queue_work(pst_workqueue, pst_work);
}
/**
* queue_delayed_work - queue work on a workqueue after delay
* @wq: workqueue to use
* @dwork: delayable work to queue
* @delay: number of jiffies to wait before queueing
*
* Equivalent to queue_delayed_work_on() but tries to use the local CPU.
*/
static inline hi_u32 oal_queue_delayed_work(oal_workqueue_stru *pst_workqueue,
oal_delayed_work *pst_work, unsigned long delay)
{
return queue_delayed_work(pst_workqueue, pst_work, delay);
}
/**
* queue_delayed_work_on - queue work on specific CPU after delay
* @cpu: CPU number to execute work on
* @wq: workqueue to use
* @dwork: work to queue
* @delay: number of jiffies to wait before queueing
*
* Returns %false if @work was already on a queue, %true otherwise. If
* @delay is zero and @dwork is idle, it will be scheduled for immediate
* */
static inline hi_u32 oal_queue_delayed_work_on(hi_u32 cpu, oal_workqueue_stru *pst_workqueue,
oal_delayed_work *pst_work, unsigned long delay)
{
return queue_delayed_work_on(cpu, pst_workqueue, pst_work, delay);
}
/*****************************************************************************
功能描述 : queue work on system wq after delay
输入参数 : @dwork: delayable work to queue
@delay: number of jiffies to wait before queueing
输出参数 : 无
返 回 值 :
*****************************************************************************/
static inline hi_u32 oal_queue_delayed_system_work(oal_delayed_work *pst_work, unsigned long delay)
{
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 4, 35))
return queue_delayed_work(system_wq, pst_work, delay);
#else
return 1;
#endif
}
#define oal_work_is_busy(work) work_busy(work)
#define oal_cancel_delayed_work_sync(dwork) cancel_delayed_work_sync(dwork)
#define oal_cancel_work_sync(work) cancel_work_sync(work)
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif
#endif /* end of oal_workqueue.h */