#ifndef __WLAN_THREAD_H_ #define __WLAN_THREAD_H_ #include struct wlan_thread { struct task_struct *task; wait_queue_head_t waitq; pid_t pid; void *priv; }; static inline void wlan_activate_thread(struct wlan_thread * thr) { /** Record the thread pid */ thr->pid = current->pid; /** Initialize the wait queue */ init_waitqueue_head(&thr->waitq); } static inline void wlan_deactivate_thread(struct wlan_thread * thr) { lbs_deb_enter(LBS_DEB_THREAD); thr->pid = 0; lbs_deb_leave(LBS_DEB_THREAD); } static inline void wlan_create_thread(int (*wlanfunc) (void *), struct wlan_thread * thr, char *name) { thr->task = kthread_run(wlanfunc, thr, "%s", name); } static inline int wlan_terminate_thread(struct wlan_thread * thr) { lbs_deb_enter(LBS_DEB_THREAD); /* Check if the thread is active or not */ if (!thr->pid) { printk(KERN_ERR "Thread does not exist\n"); return -1; } kthread_stop(thr->task); lbs_deb_leave(LBS_DEB_THREAD); return 0; } #endif