Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / afs / SOLARIS / 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 * 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
36typedef struct cred afs_ucred_t;
37typedef 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()
45extern void gethrestime(timespec_t *);
46static int
47local_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>
88extern 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"
121extern ddi_taskq_t *afs_taskq;
122extern 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 */
128struct 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_ */