Commit | Line | Data |
---|---|---|
805e021f CE |
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_SUN5_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 | #define osi_vnhold(avc, r) do { \ | |
58 | struct vnode *vp = AFSTOV(avc); \ | |
59 | uint_t prevcount; \ | |
60 | \ | |
61 | mutex_enter(&vp->v_lock); \ | |
62 | prevcount = vp->v_count++; \ | |
63 | mutex_exit(&vp->v_lock); \ | |
64 | \ | |
65 | if (prevcount == 0) { \ | |
66 | VFS_HOLD(afs_globalVFS); \ | |
67 | } \ | |
68 | } while(0) | |
69 | ||
70 | #define gop_rdwr(rw,gp,base,len,offset,segflg,ioflag,ulimit,cr,aresid) \ | |
71 | vn_rdwr((rw),(gp),(base),(len),(offset),(segflg),(ioflag),(ulimit),(cr),(aresid)) | |
72 | #define gop_lookupname(fnamep,segflg,followlink,compvpp) \ | |
73 | lookupname((fnamep),(segflg),(followlink),NULL,(compvpp)) | |
74 | #define gop_lookupname_user(fnamep,segflg,followlink,compvpp) \ | |
75 | lookupname((fnamep),(segflg),(followlink),NULL,(compvpp)) | |
76 | ||
77 | ||
78 | #if defined(AFS_SUN510_ENV) | |
79 | #define afs_suser(x) afs_osi_suser(x) | |
80 | #else | |
81 | #define afs_suser(x) suser(x) | |
82 | #endif | |
83 | ||
84 | /* | |
85 | * Global lock support. | |
86 | */ | |
87 | #include <sys/mutex.h> | |
88 | extern kmutex_t afs_global_lock; | |
89 | ||
90 | #define AFS_GLOCK() mutex_enter(&afs_global_lock) | |
91 | #define AFS_GUNLOCK() mutex_exit(&afs_global_lock) | |
92 | #define ISAFS_GLOCK() mutex_owned(&afs_global_lock) | |
93 | #define osi_InitGlock() \ | |
94 | mutex_init(&afs_global_lock, "afs_global_lock", MUTEX_DEFAULT, NULL); | |
95 | ||
96 | ||
97 | /* Associate the Berkley signal equivalent lock types to System V's */ | |
98 | #define LOCK_SH 1 /* F_RDLCK */ | |
99 | #define LOCK_EX 2 /* F_WRLCK */ | |
100 | #define LOCK_NB 4 /* XXX */ | |
101 | #define LOCK_UN 8 /* F_UNLCK */ | |
102 | ||
103 | #ifndef IO_APPEND | |
104 | #define IO_APPEND FAPPEND | |
105 | #endif | |
106 | ||
107 | #ifndef IO_SYNC | |
108 | #define IO_SYNC FSYNC | |
109 | #endif | |
110 | ||
111 | /* | |
112 | ** Macro returns 1 if file is larger than 2GB; else returns 0 | |
113 | */ | |
114 | #undef AfsLargeFileUio | |
115 | #define AfsLargeFileUio(uio) ( (uio)->_uio_offset._p._u ? 1 : 0 ) | |
116 | #undef AfsLargeFileSize | |
117 | #define AfsLargeFileSize(pos, off) ( ((offset_t)(pos)+(offset_t)(off) > (offset_t)0x7fffffff)?1:0) | |
118 | ||
119 | #if defined(AFS_SUN510_ENV) | |
120 | #include "h/sunddi.h" | |
121 | extern ddi_taskq_t *afs_taskq; | |
122 | extern krwlock_t afsifinfo_lock; | |
123 | ||
124 | /* this should be in rx/SOLARIS/rx_knet.c accessed via accessor functions, | |
125 | eventually */ | |
126 | #include "net/if.h" | |
127 | /* Global interface info struct */ | |
128 | struct afs_ifinfo { | |
129 | char ifname[LIFNAMSIZ]; | |
130 | ipaddr_t ipaddr; | |
131 | ipaddr_t netmask; | |
132 | uint_t mtu; | |
133 | uint64_t flags; | |
134 | int metric; | |
135 | ipaddr_t dstaddr; | |
136 | }; | |
137 | #endif /* AFS_SUN510_ENV */ | |
138 | ||
139 | #define osi_procname(procname, size) strncpy(procname, PTOU(ttoproc(curthread))->u_comm, size) | |
140 | ||
141 | #endif /* _OSI_MACHDEP_H_ */ |