Commit | Line | Data |
---|---|---|
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 | |
26 | extern struct timeval time; | |
27 | #define osi_Time() (time.tv_sec) | |
28 | ||
29 | typedef struct ucred afs_ucred_t; | |
30 | typedef 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) | |
55 | extern sema_t afs_global_sema; | |
56 | #else | |
57 | extern b_sema_t afs_global_sema; | |
58 | #endif | |
59 | ||
60 | extern void osi_InitGlock(void); | |
61 | ||
62 | #if !defined(AFS_HPUX110_ENV) | |
63 | extern void afsHash(int nbuckets); | |
64 | extern sv_sema_t *afsHashInsertFind(tid_t key); | |
65 | extern sv_sema_t *afsHashFind(tid_t key); | |
66 | extern 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 | */ | |
102 | void afs_osi_Sleep(void *event); | |
103 | int 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) | |
109 | extern 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_ */ |