Import Upstream version 1.8.5
[hcoop/debian/openafs.git] / src / afs / HPUX / osi_machdep.h
CommitLineData
805e021f
CE
1
2/*
3 * Copyright 2000, International Business Machines Corporation and others.
4 * All Rights Reserved.
5 *
6 * This software has been released under the terms of the IBM Public
7 * License. For details, see the LICENSE file in the top-level source
8 * directory or online at http://www.openafs.org/dl/license10.html
9 */
10
11/*
12 * HPUX 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 "h/kern_sem.h"
23#include "h/proc_iface.h"
24
25#define afs_hz hz
26extern struct timeval time;
27#define osi_Time() (time.tv_sec)
28
29typedef struct ucred afs_ucred_t;
30typedef proc_t afs_proc_t;
31
32#define osi_vnhold(avc, r) do { VN_HOLD(AFSTOV(avc)); } while(0)
33#define gop_rdwr(rw,gp,base,len,offset,segflg,unit,aresid) \
34 vn_rdwr((rw),(gp),(base),(len),(offset),(segflg),(unit),(aresid),0)
35#define gop_lookupname(fnamep,segflg,followlink,compvpp) \
36 lookupname((fnamep),(segflg),(followlink),NULL,(compvpp))
37#define gop_lookupname_user(fnamep,segflg,followlink,compvpp) \
38 lookupname((fnamep),(segflg),(followlink),NULL,(compvpp))
39
40#undef afs_suser
41
42#define osi_curcred() (p_cred(u.u_procp))
43
44#define getpid() (afs_uint32)p_pid(u.u_procp)
45
46#define getppid() (afs_uint32)p_ppid(u.u_procp)
47
48/*
49 * Global lock support.
50 *
51 * HP uses global mutex to protect afs land
52 */
53
54#if !defined(AFS_HPUX110_ENV)
55extern sema_t afs_global_sema;
56#else
57extern b_sema_t afs_global_sema;
58#endif
59
60extern void osi_InitGlock(void);
61
62#if !defined(AFS_HPUX110_ENV)
63extern void afsHash(int nbuckets);
64extern sv_sema_t *afsHashInsertFind(tid_t key);
65extern sv_sema_t *afsHashFind(tid_t key);
66extern void afsHashRelease(tid_t key);
67
68#define AFS_GLOCK_PID kt_tid(u.u_kthreadp)
69#define AFS_SAVE_SEMA afsHashInsertFind(AFS_GLOCK_PID)
70#define AFS_FIND_SEMA afsHashFind(AFS_GLOCK_PID)
71
72#define AFS_GLOCK() MP_PXSEMA(&afs_global_sema, AFS_SAVE_SEMA)
73#define AFS_GUNLOCK() (AFS_ASSERT_GLOCK(), MP_VXSEMA(&afs_global_sema,AFS_FIND_SEMA), (!uniprocessor ? (afsHashRelease(AFS_GLOCK_PID),0) : 0))
74#define ISAFS_GLOCK() (!uniprocessor ? owns_sema(&afs_global_sema):1)
75
76#else
77#define AFS_GLOCK() b_psema(&afs_global_sema)
78#define AFS_GUNLOCK() b_vsema(&afs_global_sema)
79#define ISAFS_GLOCK() b_owns_sema(&afs_global_sema)
80
81#endif
82
83/* Uses splnet only in the SP case */
84#define SPLVAR ulong_t splvar
85#define NETPRI NET_SPLNET(splvar)
86#define USERPRI NET_SPLX(splvar)
87
88#if !defined(AFS_HPUX110_ENV)
89/*
90 * On HP, the global lock is an alpha semaphore, hence it is automatically
91 * released and reacquired aroubd a sleep() and wakeup().
92 */
93
94#define afs_osi_Sleep(x) sleep((caddr_t) x,PZERO-2)
95#else
96/*
97 * On 11.22 global lock is a beta semaphore, hence we need to
98 * release and reacquire around sllep and wakeup. We also need to
99 * use the get_sleep_lock.
100 * afs_osi_Sleep and afs_osi_Wakeup are defined
101 */
102void afs_osi_Sleep(void *event);
103int afs_osi_Wakeup(void *event);
104#endif
105
106#define osi_NullHandle(x) ((x)->proc == (caddr_t) 0)
107
108#if !defined(AFS_HPUX110_ENV)
109extern caddr_t kmem_alloc();
110#endif
111#if defined(AFS_HPUX1111_ENV)
112#include <sys/kthread_iface.h> /* for kt_cred() */
113#endif
114
115/* Expected to be available as a patch from HP */
116/* See section D of the top level README for details */
117#if defined(AFS_HPUX110_ENV)
118#include <sys/vfs_vm.h>
119#else
120#include <vfs_vm.h>
121#endif
122
123#define osi_procname(procname, size) strncpy(procname, "", size)
124
125#endif /* _OSI_MACHDEP_H_ */