Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / afs / FBSD / osi_machdep.h
CommitLineData
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 *
12 * FBSD OSI header file. Extends afs_osi.h.
13 *
14 * afs_osi.h includes this file, which is the only way this file should
15 * be included in a source file. This file can redefine macros declared in
16 * afs_osi.h.
17 */
18
19#ifndef _OSI_MACHDEP_H_
20#define _OSI_MACHDEP_H_
21
22#include <sys/lock.h>
23#include <sys/time.h>
24#include <sys/mutex.h>
25#include <sys/vnode.h>
26#if defined(AFS_FBSD80_ENV)
27#include <sys/priv.h>
28#endif
29
30/*
31 * Time related macros
32 */
33#define osi_Time() time_second
34#define afs_hz hz
35
36typedef struct ucred afs_ucred_t;
37typedef struct proc afs_proc_t;
38
39#define afs_bufferpages bufpages
40#ifndef iodone
41#define iodone biodone
42#endif
43
44#ifdef AFS_FBSD80_ENV
45#define VSUID S_ISUID
46#define VSGID S_ISGID
47#endif
48
49#define osi_vnhold(avc,r) vref(AFSTOV(avc))
50
51#define vType(vc) AFSTOV(vc)->v_type
52#define vSetVfsp(vc, vfsp) AFSTOV(vc)->v_mount = (vfsp)
53#define vSetType(vc, type) AFSTOV(vc)->v_type = (type)
54#if defined(AFS_FBSD60_ENV) && defined(KERNEL)
55extern struct vop_vector afs_vnodeops;
56# define IsAfsVnode(v) ((v)->v_op == &afs_vnodeops)
57#else
58extern int (**afs_vnodeop_p) ();
59# define IsAfsVnode(v) ((v)->v_op == afs_vnodeop_p)
60#endif
61#define SetAfsVnode(v) /* nothing; done in getnewvnode() */
62
63#if defined(AFS_FBSD80_ENV)
64#define osi_vinvalbuf(vp, flags, slpflag, slptimeo) \
65 vinvalbuf((vp), (flags), (slpflag), (slptimeo))
66#else
67#define osi_vinvalbuf(vp, flags, slpflag, slptimeo) \
68 vinvalbuf((vp), (flags), (curthread), (slpflag), (slptimeo))
69#define osi_curproc() (curthread)
70#endif
71
72#undef gop_lookupname
73#define gop_lookupname osi_lookupname
74
75#undef gop_lookupname_user
76#define gop_lookupname_user osi_lookupname
77
78#define afs_strcat(s1, s2) strcat((s1), (s2))
79
80/* malloc */
81extern void *osi_fbsd_alloc(size_t size, int dropglobal);
82extern void osi_fbsd_free(void *p);
83
84#define afs_osi_Alloc_NoSleep(size) osi_fbsd_alloc((size), 0)
85
86#ifdef AFS_FBSD80_ENV
87#define VN_RELE(vp) \
88 do { \
89 vrele(vp); \
90 } while(0);
91#else
92#define VN_RELE(vp) vrele(vp)
93#endif
94#define VN_HOLD(vp) VREF(vp)
95
96#undef afs_suser
97#if defined(AFS_FBSD80_ENV)
98/* OpenAFS-specific privileges negotiated for FreeBSD, thanks due to
99 * Ben Kaduk */
100#define osi_suser_client_settings(x) (!priv_check(curthread, PRIV_AFS_ADMIN))
101#define osi_suser_afs_daemon(x) (!priv_check(curthread, PRIV_AFS_DAEMON))
102#define afs_suser(x) (osi_suser_client_settings((x)) && osi_suser_afs_daemon((x)))
103#else
104#define afs_suser(x) (!suser(curthread))
105#endif
106
107#undef osi_getpid
108#define VT_AFS "afs"
109#define VROOT VV_ROOT
110#define v_flag v_vflag
111#define osi_curcred() (curthread->td_ucred)
112#define osi_curproc() (curthread)
113#define osi_getpid() (curthread->td_proc->p_pid)
114#define simple_lock(x) mtx_lock(x)
115#define simple_unlock(x) mtx_unlock(x)
116#define gop_rdwr(rw,gp,base,len,offset,segflg,unit,cred,aresid) \
117 vn_rdwr((rw),(gp),(base),(len),(offset),(segflg),(unit),(cred),(cred),(aresid), curthread)
118extern struct mtx afs_global_mtx;
119extern struct thread *afs_global_owner;
120#define AFS_GLOCK() \
121 do { \
122 mtx_assert(&afs_global_mtx, (MA_NOTOWNED)); \
123 mtx_lock(&afs_global_mtx); \
124 mtx_assert(&afs_global_mtx, (MA_OWNED|MA_NOTRECURSED)); \
125 } while (0)
126#define AFS_GUNLOCK() \
127 do { \
128 mtx_assert(&afs_global_mtx, (MA_OWNED|MA_NOTRECURSED)); \
129 mtx_unlock(&afs_global_mtx); \
130 } while (0)
131#define ISAFS_GLOCK() (mtx_owned(&afs_global_mtx))
132# if defined(AFS_FBSD80_ENV) && defined(WITNESS)
133# define osi_InitGlock() \
134 do { \
135 memset(&afs_global_mtx, 0, sizeof(struct mtx)); \
136 mtx_init(&afs_global_mtx, "AFS global lock", NULL, MTX_DEF); \
137 afs_global_owner = 0; \
138 } while(0)
139# else
140# define osi_InitGlock() \
141 do { \
142 mtx_init(&afs_global_mtx, "AFS global lock", NULL, MTX_DEF); \
143 afs_global_owner = 0; \
144 } while (0)
145# endif
146
147#undef SPLVAR
148#define SPLVAR
149#undef NETPRI
150#define NETPRI
151#undef USERPRI
152#define USERPRI
153
154#define osi_procname(procname, size) strncpy(procname, curproc->p_comm, size)
155
156#endif /* _OSI_MACHDEP_H_ */