afs: afs_osi_Alloc_NoSleep() cleanup
[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 #define NFSSRV_AMD64    "/kernel/misc/amd64/nfssrv"
35
36 typedef struct cred afs_ucred_t;
37 typedef struct proc afs_proc_t;
38
39 /*
40  * Time related macros
41  */
42 #define afs_hz      hz
43 #ifdef AFS_SUN59_ENV
44 #define osi_Time() local_osi_Time()
45 extern void gethrestime(timespec_t *);
46 static int
47 local_osi_Time()
48 {
49     timespec_t start;
50     gethrestime(&start);
51     return start.tv_sec;
52 }
53 #else
54 #define osi_Time() (hrestime.tv_sec)
55 #endif
56
57 #ifdef AFS_SUN58_ENV
58 # define osi_vnhold(avc, r)  do {    \
59     struct vnode *vp = AFSTOV(avc); \
60     uint_t prevcount;               \
61                                     \
62     mutex_enter(&vp->v_lock);       \
63     prevcount = vp->v_count++;      \
64     mutex_exit(&vp->v_lock);        \
65                                     \
66     if (prevcount == 0) {           \
67         VFS_HOLD(afs_globalVFS);    \
68     }                               \
69 } while(0)
70 #else /* !AFS_SUN58_ENV */
71 # define osi_vnhold(avc, r)  do { VN_HOLD(AFSTOV(avc)); } while(0)
72 #endif /* !AFS_SUN58_ENV */
73
74 #define gop_rdwr(rw,gp,base,len,offset,segflg,ioflag,ulimit,cr,aresid) \
75   vn_rdwr((rw),(gp),(base),(len),(offset),(segflg),(ioflag),(ulimit),(cr),(aresid))
76 #define gop_lookupname(fnamep,segflg,followlink,compvpp) \
77   lookupname((fnamep),(segflg),(followlink),NULL,(compvpp))
78 #define gop_lookupname_user(fnamep,segflg,followlink,compvpp) \
79   lookupname((fnamep),(segflg),(followlink),NULL,(compvpp))
80
81
82 #if defined(AFS_SUN510_ENV)
83 #define afs_suser(x)        afs_osi_suser(x)
84 #else
85 #define afs_suser(x)        suser(x)
86 #endif
87
88 /*
89  * Global lock support.
90  */
91 #include <sys/mutex.h>
92 extern kmutex_t afs_global_lock;
93
94 #define AFS_GLOCK()     mutex_enter(&afs_global_lock);
95 #define AFS_GUNLOCK()   mutex_exit(&afs_global_lock);
96 #define ISAFS_GLOCK()   mutex_owned(&afs_global_lock)
97 #define osi_InitGlock() \
98         mutex_init(&afs_global_lock, "afs_global_lock", MUTEX_DEFAULT, NULL);
99 #endif
100
101
102 /* Associate the Berkley signal equivalent lock types to System V's */
103 #define LOCK_SH 1               /* F_RDLCK */
104 #define LOCK_EX 2               /* F_WRLCK */
105 #define LOCK_NB 4               /* XXX */
106 #define LOCK_UN 8               /* F_UNLCK */
107
108 #ifndef IO_APPEND
109 #define IO_APPEND       FAPPEND
110 #endif
111
112 #ifndef IO_SYNC
113 #define IO_SYNC         FSYNC
114 #endif
115
116 #if     defined(AFS_SUN56_ENV)
117 /*
118 ** Macro returns 1 if file is larger than 2GB; else returns 0
119 */
120 #undef AfsLargeFileUio
121 #define AfsLargeFileUio(uio)       ( (uio)->_uio_offset._p._u ? 1 : 0 )
122 #undef AfsLargeFileSize
123 #define AfsLargeFileSize(pos, off) ( ((offset_t)(pos)+(offset_t)(off) > (offset_t)0x7fffffff)?1:0)
124 #endif
125
126 #if defined(AFS_SUN510_ENV)
127 #include "h/sunddi.h"
128 extern ddi_taskq_t *afs_taskq;
129 extern krwlock_t afsifinfo_lock;
130
131 /* this should be in rx/SOLARIS/rx_knet.c accessed via accessor functions,
132    eventually */
133 #include "net/if.h"
134 /* Global interface info struct */
135 struct afs_ifinfo {
136   char        ifname[LIFNAMSIZ];
137   ipaddr_t    ipaddr;
138   ipaddr_t    netmask;
139   uint_t      mtu;
140   uint64_t    flags;
141   int         metric;
142   ipaddr_t    dstaddr;
143 };
144
145 #define osi_procname(procname, size) strncpy(procname, PTOU(ttoproc(curthread))->u_comm, size)
146
147 #endif /* _OSI_MACHDEP_H_ */