]> err.no Git - linux-2.6/blob - drivers/net/wireless/libertas/thread.h
Merge branch 'server-cluster-locking-api' of git://linux-nfs.org/~bfields/linux
[linux-2.6] / drivers / net / wireless / libertas / thread.h
1 #ifndef __WLAN_THREAD_H_
2 #define __WLAN_THREAD_H_
3
4 #include        <linux/kthread.h>
5
6 struct wlan_thread {
7         struct task_struct *task;
8         wait_queue_head_t waitq;
9         pid_t pid;
10         void *priv;
11 };
12
13 static inline void wlan_activate_thread(struct wlan_thread * thr)
14 {
15         /** Record the thread pid */
16         thr->pid = current->pid;
17
18         /** Initialize the wait queue */
19         init_waitqueue_head(&thr->waitq);
20 }
21
22 static inline void wlan_deactivate_thread(struct wlan_thread * thr)
23 {
24         ENTER();
25
26         thr->pid = 0;
27
28         LEAVE();
29 }
30
31 static inline void wlan_create_thread(int (*wlanfunc) (void *),
32                                       struct wlan_thread * thr, char *name)
33 {
34         thr->task = kthread_run(wlanfunc, thr, "%s", name);
35 }
36
37 static inline int wlan_terminate_thread(struct wlan_thread * thr)
38 {
39         ENTER();
40
41         /* Check if the thread is active or not */
42         if (!thr->pid) {
43                 printk(KERN_ERR "Thread does not exist\n");
44                 return -1;
45         }
46         kthread_stop(thr->task);
47
48         LEAVE();
49         return 0;
50 }
51
52 #endif