2 * Copyright 2000, International Business Machines Corporation and others.
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
11 * Solaris OSI header file. Extends afs_osi.h.
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
18 #ifndef _OSI_MACHDEP_H_
19 #define _OSI_MACHDEP_H_
21 #ifdef AFS_SUN57_64BIT_ENV
22 #include <sys/model.h> /* for get_udatamodel() */
25 #define getpid() curproc->p_pid
28 * The location of the NFSSRV module
29 * Used in osi_vfsops.c when checking to see if the nfssrv module is
32 #define NFSSRV "/kernel/misc/nfssrv"
33 #define NFSSRV_V9 "/kernel/misc/sparcv9/nfssrv"
34 #define NFSSRV_AMD64 "/kernel/misc/amd64/nfssrv"
36 typedef struct cred afs_ucred_t;
37 typedef struct proc afs_proc_t;
44 #define osi_Time() local_osi_Time()
45 extern void gethrestime(timespec_t *);
54 #define osi_Time() (hrestime.tv_sec)
57 #undef afs_osi_Alloc_NoSleep
58 extern void *afs_osi_Alloc_NoSleep(size_t size);
61 # define osi_vnhold(avc, r) do { \
62 struct vnode *vp = AFSTOV(avc); \
65 mutex_enter(&vp->v_lock); \
66 prevcount = vp->v_count++; \
67 mutex_exit(&vp->v_lock); \
69 if (prevcount == 0) { \
70 VFS_HOLD(afs_globalVFS); \
73 #else /* !AFS_SUN58_ENV */
74 # define osi_vnhold(avc, r) do { VN_HOLD(AFSTOV(avc)); } while(0)
75 #endif /* !AFS_SUN58_ENV */
77 #define gop_rdwr(rw,gp,base,len,offset,segflg,ioflag,ulimit,cr,aresid) \
78 vn_rdwr((rw),(gp),(base),(len),(offset),(segflg),(ioflag),(ulimit),(cr),(aresid))
79 #define gop_lookupname(fnamep,segflg,followlink,compvpp) \
80 lookupname((fnamep),(segflg),(followlink),NULL,(compvpp))
81 #define gop_lookupname_user(fnamep,segflg,followlink,compvpp) \
82 lookupname((fnamep),(segflg),(followlink),NULL,(compvpp))
85 #if defined(AFS_SUN510_ENV)
86 #define afs_suser(x) afs_osi_suser(x)
88 #define afs_suser(x) suser(x)
92 * Global lock support.
94 #include <sys/mutex.h>
95 extern kmutex_t afs_global_lock;
97 #define AFS_GLOCK() mutex_enter(&afs_global_lock);
98 #define AFS_GUNLOCK() mutex_exit(&afs_global_lock);
99 #define ISAFS_GLOCK() mutex_owned(&afs_global_lock)
100 #define osi_InitGlock() \
101 mutex_init(&afs_global_lock, "afs_global_lock", MUTEX_DEFAULT, NULL);
105 /* Associate the Berkley signal equivalent lock types to System V's */
106 #define LOCK_SH 1 /* F_RDLCK */
107 #define LOCK_EX 2 /* F_WRLCK */
108 #define LOCK_NB 4 /* XXX */
109 #define LOCK_UN 8 /* F_UNLCK */
112 #define IO_APPEND FAPPEND
116 #define IO_SYNC FSYNC
119 #if defined(AFS_SUN56_ENV)
121 ** Macro returns 1 if file is larger than 2GB; else returns 0
123 #undef AfsLargeFileUio
124 #define AfsLargeFileUio(uio) ( (uio)->_uio_offset._p._u ? 1 : 0 )
125 #undef AfsLargeFileSize
126 #define AfsLargeFileSize(pos, off) ( ((offset_t)(pos)+(offset_t)(off) > (offset_t)0x7fffffff)?1:0)
129 #if defined(AFS_SUN510_ENV)
130 #include "h/sunddi.h"
131 extern ddi_taskq_t *afs_taskq;
132 extern krwlock_t afsifinfo_lock;
134 /* this should be in rx/SOLARIS/rx_knet.c accessed via accessor functions,
137 /* Global interface info struct */
139 char ifname[LIFNAMSIZ];
148 #define osi_procname(procname, size) strncpy(procname, PTOU(ttoproc(curthread))->u_comm, size)
150 #endif /* _OSI_MACHDEP_H_ */