| #ifndef __WLAN_THREAD_H_ |
| #define __WLAN_THREAD_H_ |
| |
| #include <linux/kthread.h> |
| |
| 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 |