kill-rxglock-20050413
[openafs.git] / src / afs / DARWIN / osi_machdep.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  * MACOS OSI header file. Extends afs_osi.h.
12  *
13  * afs_osi.h includes this file, which is the only way this file should
14  * be included in a source file. This file can redefine macros declared in
15  * afs_osi.h.
16  */
17
18 #ifndef _OSI_MACHDEP_H_
19 #define _OSI_MACHDEP_H_
20
21 #ifdef XAFS_DARWIN_ENV
22 #ifndef _MACH_ETAP_H_
23 #define _MACH_ETAP_H_
24 typedef unsigned short etap_event_t;
25 #endif
26 #endif
27
28 #include <sys/lock.h>
29 #include <kern/thread.h>
30 #include <sys/user.h>
31
32 #define getpid()                current_proc()->p_pid
33 #define getppid()               current_proc()->p_pptr->p_pid
34 #undef gop_lookupname
35 #define gop_lookupname osi_lookupname
36
37 #define FTRUNC 0
38
39 /* vcexcl - used only by afs_create */
40 enum vcexcl { EXCL, NONEXCL };
41
42 /* 
43  * Time related macros
44  */
45 #ifndef AFS_DARWIN60_ENV
46 extern struct timeval time;
47 #endif
48 #define osi_Time() (time.tv_sec)
49 #define afs_hz      hz
50
51 #define PAGESIZE 8192
52
53 #define AFS_UCRED       ucred
54
55 #define AFS_PROC        struct proc
56
57 #define osi_vnhold(avc,r)       VN_HOLD(AFSTOV(avc))
58 #define VN_HOLD(vp) darwin_vn_hold(vp)
59 #define VN_RELE(vp) vrele(vp);
60
61
62 #define gop_rdwr(rw,gp,base,len,offset,segflg,unit,cred,aresid) \
63   vn_rdwr((rw),(gp),(base),(len),(offset),(segflg),(unit),(cred),(aresid),current_proc())
64
65 #undef afs_suser
66
67 #ifdef KERNEL
68 extern thread_t afs_global_owner;
69 /* simple locks cannot be used since sleep can happen at any time */
70 /* Should probably use mach locks rather than bsd locks, since we use the
71    mach thread control api's elsewhere (mach locks not used for consistency
72    with rx, since rx needs lock_write_try() in order to use mach locks
73  */
74 extern struct lock__bsd__ afs_global_lock;
75 #define AFS_GLOCK() \
76     do { \
77         lockmgr(&afs_global_lock, LK_EXCLUSIVE, 0, current_proc()); \
78         osi_Assert(afs_global_owner == 0); \
79         afs_global_owner = current_thread(); \
80     } while (0)
81 #define AFS_GUNLOCK() \
82     do { \
83         osi_Assert(afs_global_owner == current_thread()); \
84         afs_global_owner = 0; \
85         lockmgr(&afs_global_lock, LK_RELEASE, 0, current_proc()); \
86     } while(0)
87 #define ISAFS_GLOCK() (afs_global_owner == current_thread())
88
89 #define SPLVAR
90 #define NETPRI
91 #define USERPRI
92 #if 0
93 #undef SPLVAR
94 #define SPLVAR int x;
95 #undef NETPRI
96 #define NETPRI x=splnet();
97 #undef USERPRI
98 #define USERPRI splx(x);
99 #endif
100
101 #define AFS_APPL_UFS_CACHE 1
102 #define AFS_APPL_HFS_CACHE 2
103
104 extern ino_t VnodeToIno(vnode_t * vp);
105 extern dev_t VnodeToDev(vnode_t * vp);
106
107 #define osi_curproc() current_proc()
108
109 /* FIXME */
110 #define osi_curcred() &afs_osi_cred 
111
112 #endif /* KERNEL */
113
114 #endif /* _OSI_MACHDEP_H_ */