reindent-20030715
[openafs.git] / src / rx / LINUX / rx_kmutex.h
1 /*
2  * Copyright 2000, International Business Machines Corporation and others.
3  * All Rights Reserved.
4  * 
5  * This software has been released under the terms of the IBM Public
6  * License.  For details, see the LICENSE file in the top-level source
7  * directory or online at http://www.openafs.org/dl/license10.html
8  */
9
10 /*
11  * rx_kmutex.h - mutex and condition variable macros for kernel environment.
12  *
13  * Linux implementation.
14  * This are noops until such time as the kernel no longer has a global lock.
15  */
16 #ifndef RX_KMUTEX_H_
17 #define RX_KMUTEX_H_
18
19 #include "rx/rx_kernel.h"       /* for osi_Panic() */
20
21 /* AFS_GLOBAL_RXLOCK_KERNEL is defined so that the busy tq code paths are
22  * used. The thread can sleep when sending packets.
23  */
24 #define AFS_GLOBAL_RXLOCK_KERNEL 1
25
26
27 #ifdef CONFIG_SMP
28 #define RX_ENABLE_LOCKS 1
29
30 #ifndef _LINUX_CODA_FS_I
31 #define _LINUX_CODA_FS_I
32 struct coda_inode_info {
33 };
34 #endif
35 #include "linux/wait.h"
36 #include "linux/sched.h"
37
38 typedef struct afs_kmutex {
39     struct semaphore sem;
40     int owner;
41 } afs_kmutex_t;
42
43 #ifndef set_current_state
44 #define set_current_state(X) current->state=X
45 #endif
46
47 #if defined(AFS_LINUX24_ENV)
48 typedef wait_queue_head_t afs_kcondvar_t;
49 #else
50 typedef struct wait_queue *afs_kcondvar_t;
51 #endif
52
53 static inline int
54 MUTEX_ISMINE(afs_kmutex_t * l)
55 {
56     return l->owner == current->pid;
57 }
58
59 #define MUTEX_INIT(a,b,c,d)     afs_mutex_init(a)
60 #define MUTEX_DESTROY(a)
61 #define MUTEX_ENTER             afs_mutex_enter
62 #define MUTEX_TRYENTER          afs_mutex_tryenter
63 #define MUTEX_EXIT              afs_mutex_exit
64
65 #if defined(AFS_LINUX24_ENV)
66 #define CV_INIT(cv,b,c,d)       init_waitqueue_head((wait_queue_head_t *)(cv))
67 #else
68 #define CV_INIT(cv,b,c,d)       init_waitqueue((struct wait_queue**)(cv))
69 #endif
70 #define CV_DESTROY(cv)
71 #define CV_WAIT_SIG(cv, m)      afs_cv_wait(cv, m, 1)
72 #define CV_WAIT(cv, m)          afs_cv_wait(cv, m, 0)
73 #define CV_TIMEDWAIT            afs_cv_timedwait
74
75 #if defined(AFS_LINUX24_ENV)
76 #define CV_SIGNAL(cv)           wake_up((wait_queue_head_t *)cv)
77 #define CV_BROADCAST(cv)        wake_up((wait_queue_head_t *)cv)
78 #else
79 #define CV_SIGNAL(cv)           wake_up((struct wait_queue**)cv)
80 #define CV_BROADCAST(cv)        wake_up((struct wait_queue**)cv)
81 #endif
82
83 #else
84
85 #define MUTEX_ISMINE(a)
86 #define osirx_AssertMine(addr, msg)
87
88 #define MUTEX_DESTROY(a)
89 #define MUTEX_ENTER(a)
90 #define MUTEX_TRYENTER(a) 1
91 #define MUTEX_EXIT(a)
92 #define MUTEX_INIT(a,b,c,d)
93 #define CV_INIT(a,b,c,d)
94 #define CV_DESTROY(a)
95 #endif
96
97 /* Since we're using the RX listener daemon, we don't need to hold off
98  * interrupts.
99  */
100 #define SPLVAR
101 #define NETPRI
102 #define USERPRI
103
104 #endif /* RX_KMUTEX_H_ */