more-rxglock-cleanup-20060126
[openafs.git] / src / afs / SOLARIS / 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  * Solaris 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 AFS_SUN57_64BIT_ENV
22 #include <sys/model.h>          /* for get_udatamodel() */
23 #endif
24
25 #define getpid()                curproc->p_pid
26
27 /**
28   * The location of the NFSSRV module
29   * Used in osi_vfsops.c when checking to see if the nfssrv module is
30   * loaded
31   */
32 #define NFSSRV          "/kernel/misc/nfssrv"
33 #define NFSSRV_V9       "/kernel/misc/sparcv9/nfssrv"
34
35 #define AFS_UCRED cred
36 #define AFS_PROC struct proc
37
38 /* 
39  * Time related macros
40  */
41 #define afs_hz      hz
42 #ifdef AFS_SUN59_ENV
43 #define osi_Time() local_osi_Time()
44 extern void gethrestime(timespec_t *);
45 static int
46 local_osi_Time()
47 {
48     timespec_t start;
49     gethrestime(&start);
50     return start.tv_sec;
51 }
52 #else
53 #define osi_Time() (hrestime.tv_sec)
54 #endif
55
56 #undef afs_osi_Alloc_NoSleep
57 extern void *afs_osi_Alloc_NoSleep(size_t size);
58
59 #define osi_vnhold(avc, r)  do { VN_HOLD(AFSTOV(avc)); } while(0)
60 #define gop_rdwr(rw,gp,base,len,offset,segflg,ioflag,ulimit,cr,aresid) \
61   vn_rdwr((rw),(gp),(base),(len),(offset),(segflg),(ioflag),(ulimit),(cr),(aresid))
62
63 #define afs_suser(x)        suser(x)
64
65
66 #ifdef KERNEL
67 /*
68  * Global lock support. 
69  */
70 #include <sys/mutex.h>
71 extern kmutex_t afs_global_lock;
72
73 #define AFS_GLOCK()     mutex_enter(&afs_global_lock);
74 #define AFS_GUNLOCK()   mutex_exit(&afs_global_lock);
75 #define ISAFS_GLOCK()   mutex_owned(&afs_global_lock)
76 #endif
77
78
79 /* Associate the Berkley signal equivalent lock types to System V's */
80 #define LOCK_SH 1               /* F_RDLCK */
81 #define LOCK_EX 2               /* F_WRLCK */
82 #define LOCK_NB 4               /* XXX */
83 #define LOCK_UN 8               /* F_UNLCK */
84
85 #ifndef IO_APPEND
86 #define IO_APPEND       FAPPEND
87 #endif
88
89 #ifndef IO_SYNC
90 #define IO_SYNC         FSYNC
91 #endif
92
93 #if     defined(AFS_SUN56_ENV)
94 /*
95 ** Macro returns 1 if file is larger than 2GB; else returns 0 
96 */
97 #undef AfsLargeFileUio
98 #define AfsLargeFileUio(uio)       ( (uio)->_uio_offset._p._u ? 1 : 0 )
99 #undef AfsLargeFileSize
100 #define AfsLargeFileSize(pos, off) ( ((offset_t)(pos)+(offset_t)(off) > (offset_t)0x7fffffff)?1:0)
101 #endif
102
103 #endif /* _OSI_MACHDEP_H_ */