6#ifndef OAL_LINUX_SCHEDULE_H
7#define OAL_LINUX_SCHEDULE_H
11#include <linux/version.h>
12#include <linux/interrupt.h>
13#include <linux/wait.h>
14#include <linux/proc_fs.h>
15#include <linux/sched.h>
16#include <linux/module.h>
17#include <linux/ktime.h>
18#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0))
19#include <linux/stacktrace.h>
21#include "linux/time.h"
22#include "linux/timex.h"
36#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37))
61#define OAL_DECLARE_TASK DECLARE_TASKLET
80#define OAL_WAIT_EVENT_INTERRUPTIBLE_TIMEOUT(_st_wq, _condition, _timeout) \
81 wait_event_interruptible_timeout(_st_wq, _condition, _timeout)
83#define OAL_INIT_COMPLETION(_my_completion) init_completion(_my_completion)
85#define OAL_COMPLETE(_my_completion) complete(_my_completion)
87#define oal_in_interrupt() in_interrupt()
91#define oal_module_license(_license_name) MODULE_LICENSE(_license_name)
93#define OAL_S_IRUGO S_IRUGO
95#define oal_module_init(_module_name) module_init(_module_name)
96#define oal_module_exit(_module_name) module_exit(_module_name)
97#define oal_module_symbol(_symbol) EXPORT_SYMBOL(_symbol)
99#define oal_smp_call_function_single(core, task, info, wait) smp_call_function_single(core, task, info, wait)
100#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 44))
101#define OAL_IS_ERR_OR_NULL(ptr) (!(ptr) || IS_ERR(ptr))
105 return !ptr || IS_ERR(ptr);
170 tasklet_init(task, p_func, args);
179 return tasklet_kill(task);
189 tasklet_schedule(task);
198 return test_bit(TASKLET_STATE_SCHED, (
unsigned long const volatile *)&task->state);
210#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,9,11))
213 return create_proc_entry(pc_name, mode, parent);
224 return remove_proc_entry(pc_name, parent);
233 return (
osal_u32)wait_for_completion_timeout(completion, timeout);
242 return (
osal_slong)wait_for_completion_interruptible_timeout(completion, timeout);
245#if defined(_PRE_OS_VERSION_LINUX) && defined(_PRE_OS_VERSION) && (_PRE_OS_VERSION_LINUX == _PRE_OS_VERSION)
252#if defined(LINUX_VERSION_CODE) && defined(KERNEL_VERSION)
253#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(5,4,0))
256 wakeup_source_init(&wakelock->
wakelock, name ? name :
"wake_lock_null");
268#if defined(LINUX_VERSION_CODE) && defined(KERNEL_VERSION)
269#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(5,4,0))
270 osal_list_del(&wakelock->
list);
272 wakeup_source_trash(&wakelock->
wakelock);
279#if defined(LINUX_VERSION_CODE) && defined(KERNEL_VERSION)
280#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(5,4,0))
285 __pm_stay_awake(&wakelock->
wakelock);
290 printk(KERN_DEBUG
"wakelock[%s] lockcnt:%lu <==%pf\n", wakelock->
wakelock.name, wakelock->
lock_count,
300#if defined(LINUX_VERSION_CODE) && defined(KERNEL_VERSION)
301#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(5,4,0))
313 printk(KERN_DEBUG
"wakeunlock[%s] lockcnt:%lu <==%pf\n", wakelock->
wakelock.name, wakelock->
lock_count,
#define NULL
Definition common_def.h:21
#define OAL_INLINE
Definition driver_soc_common.h:47
int osal_spin_lock_init(osal_spinlock *lock)
Initialize a spin lock.
Definition osal_spinlock.c:15
void osal_spin_lock_irqsave(osal_spinlock *lock, unsigned long *flags)
acquire the spin_lock.
Definition osal_spinlock.c:89
void osal_spin_lock_destroy(osal_spinlock *lock)
Destroy the spin_lock.
Definition osal_spinlock.c:116
void osal_spin_unlock_irqrestore(osal_spinlock *lock, unsigned long *flags)
release the spin_lock.
Definition osal_spinlock.c:103
rwlock_t oal_rwlock_stru
Definition oal_schedule.h:53
OAL_STATIC OAL_INLINE void oal_remove_proc_entry(const osal_s8 *pc_name, oal_proc_dir_entry_stru *parent)
Definition oal_schedule.h:222
OAL_STATIC OAL_INLINE osal_void oal_task_init(oal_tasklet_stru *task, oal_defer_func p_func, osal_ulong args)
Definition oal_schedule.h:168
osal_void(* oal_defer_func)(osal_ulong)
Definition oal_schedule.h:58
#define OAL_IS_ERR_OR_NULL(ptr)
Definition oal_schedule.h:101
struct tasklet_struct oal_tasklet_stru
Definition oal_schedule.h:57
osal_u32(* oal_irqlocked_func)(osal_void *)
Definition oal_schedule.h:51
struct timer_list oal_timer_list_stru
Definition oal_schedule.h:54
OAL_STATIC OAL_INLINE osal_void oal_task_sched(oal_tasklet_stru *task)
Definition oal_schedule.h:187
struct proc_dir_entry oal_proc_dir_entry_stru
Definition oal_schedule.h:110
atomic_t oal_atomic
Definition oal_schedule.h:47
OAL_STATIC OAL_INLINE osal_slong oal_wait_for_completion_interruptible_timeout(oal_completion *completion, osal_ulong timeout)
Definition oal_schedule.h:239
OAL_STATIC OAL_INLINE osal_u32 oal_wait_for_completion_timeout(oal_completion *completion, osal_u32 timeout)
Definition oal_schedule.h:231
OAL_STATIC OAL_INLINE oal_proc_dir_entry_stru * oal_create_proc_entry(const osal_s8 *pc_name, osal_u16 mode, oal_proc_dir_entry_stru *parent)
Definition oal_schedule.h:207
struct mutex oal_mutex_stru
Definition oal_schedule.h:112
struct completion oal_completion
Definition oal_schedule.h:114
OAL_STATIC OAL_INLINE osal_ulong oal_task_is_scheduled(oal_tasklet_stru *task)
Definition oal_schedule.h:196
OAL_STATIC OAL_INLINE osal_void oal_task_kill(oal_tasklet_stru *task)
Definition oal_schedule.h:177
OAL_STATIC OAL_INLINE osal_void oal_rw_lock_write_unlock(oal_rwlock_stru *lock)
Definition oal_schedule.h:154
OAL_STATIC OAL_INLINE void oal_wake_lock(oal_wakelock_stru *wakelock)
Definition oal_schedule.h:191
osal_u32(* oal_module_func_t)(osal_void)
Definition oal_schedule.h:32
OAL_STATIC OAL_INLINE osal_void oal_wake_lock_exit(oal_wakelock_stru *wakelock)
Definition oal_schedule.h:180
OAL_STATIC OAL_INLINE osal_void oal_rw_lock_write_lock(oal_rwlock_stru *lock)
Definition oal_schedule.h:131
struct _oal_wakelock_stru_ oal_wakelock_stru
struct _oal_rwlock_stru oal_rwlock_stru
OAL_STATIC OAL_INLINE osal_void oal_wake_lock_init(oal_wakelock_stru *wakelock, char *name)
Definition oal_schedule.h:163
OAL_STATIC OAL_INLINE osal_void oal_rw_lock_init(oal_rwlock_stru *lock)
Definition oal_schedule.h:62
OAL_STATIC OAL_INLINE osal_void oal_rw_lock_read_unlock(oal_rwlock_stru *lock)
Definition oal_schedule.h:108
OAL_STATIC OAL_INLINE void oal_wake_unlock(oal_wakelock_stru *wakelock)
Definition oal_schedule.h:212
OAL_STATIC OAL_INLINE osal_void oal_rw_lock_read_lock(oal_rwlock_stru *lock)
Definition oal_schedule.h:85
#define OAL_UNLIKELY(_expr)
Definition oal_plat_type.h:43
struct osal_list_head * oal_get_wakelock_head(void)
int osal_s32
Definition osal_types.h:19
long osal_slong
Definition osal_types.h:21
signed char osal_s8
Definition osal_types.h:17
void osal_void
Definition osal_types.h:29
unsigned int osal_u32
Definition osal_types.h:13
unsigned short osal_u16
Definition osal_types.h:12
unsigned long osal_ulong
Definition osal_types.h:15
errno_t memset_s(void *dest, size_t destMax, int c, size_t count)
#define OAL_STATIC
Definition soc_wifi_service_api.c:30
Definition oal_schedule.h:35
osal_u32 debug
Definition oal_schedule.h:44
struct wakeup_source wakelock
Definition oal_schedule.h:37
osal_ulong lock_count
Definition oal_schedule.h:42
struct osal_list_head list
Definition oal_schedule.h:39
osal_ulong locked_addr
Definition oal_schedule.h:43
osal_spinlock lock
Definition oal_schedule.h:38
Definition osal_list.h:39
Definition osal_spinlock.h:18