e5a7c1bdefd34a6efa52e4ce19bdda53cb036aa8
[openafs.git] / src / sys / afssyscalls.h
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 #ifndef AFS_AFSSYSCALLS_H
11 #define AFS_AFSSYSCALLS_H
12
13 #ifndef AFS_NT40_ENV
14
15 /* Declare Inode type. */
16 #include <afs/param.h>
17 #ifdef AFS_NAMEI_ENV
18 #include <sys/types.h>
19 #if AFS_64BIT_ENV
20 typedef afs_uint64 Inode;
21 #else
22 typedef u_int64_t Inode;
23 #endif
24 #else /* AFS_NAMEI_ENV */
25 #ifdef AFS_64BIT_IOPS_ENV
26 #ifdef AFS_SGI62_ENV
27 typedef uint64_t Inode;
28 #else
29 #include <sys/types.h>
30 #if AFS_64BIT_ENV
31 typedef afs_uint64 Inode;
32 #else
33 error Need 64 bit Inode defined.
34 #endif
35 #endif                          /* AFS_SGI62_ENV */
36 #else /* AFS_64BIT_IOPS_ENV */
37 typedef unsigned int Inode;
38 #endif
39
40 #ifdef AFS_DEBUG_IOPS
41 extern FILE *inode_debug_log;
42 #define AFS_DEBUG_IOPS_LOG(F) (inode_debug_log = (F))
43 #else
44 #define AFS_DEBUG_IOPS_LOG(F)
45 #endif
46
47 /* Glue layer. */
48 #ifdef AFS_LINUX20_ENV
49 int proc_afs_syscall(long syscall, long param1, long param2, long param3, 
50                      long param4, int *rval);
51 #endif
52
53 /* Declarations for inode system calls. */
54 #ifdef AFS_SGI_XFS_IOPS_ENV
55 extern uint64_t icreatename64(int dev, char *partname, int p0, int p1, int p2,
56                               int p3);
57 extern int iopen64(int dev, uint64_t inode, int usrmod);
58 extern int iinc64(int dev, uint64_t inode, int inode_p1);
59 extern int idec64(int dev, uint64_t inode, int inode_p1);
60 extern int ilistinode64(int dev, uint64_t inode, void *data, int *datalen);
61
62 #ifdef AFS_DEBUG_IOPS
63 extern uint64_t debug_icreatename64(int dev, char *partname, int p0, int p1,
64                                     int p2, int p3, char *file, int line);
65 extern int debug_iopen64(int dev, uint64_t inode, int usrmod, char *file,
66                          int line);
67 extern int debug_iinc64(int dev, uint64_t inode, int inode_p1, char *file,
68                         int line);
69 extern int debug_idec64(int dev, uint64_t inode, int inode_p1, char *file,
70                         int line);
71
72 #endif /* AFS_DEBUG_IOPS */
73 #endif /* AFS_SGI_XFS_IOPS_ENV */
74
75 #ifdef AFS_64BIT_IOPS_ENV
76 extern int inode_read(int dev, Inode inode, int inode_p1, uint32_t offset,
77                       char *cbuf, uint32_t count);
78 extern int inode_write(int dev, Inode inode, int inode_p1, uint32_t offset,
79                        char *cbuf, uint32_t count);
80 #else
81 extern int inode_read();
82 extern int inode_write();
83 #endif
84
85 #ifdef AFS_SGI_VNODE_GLUE
86 /* flag: 1 = has NUMA, 0 = no NUMA, -1 = kernel decides. */
87 extern int afs_init_kernel_config(int flag);
88 #endif /* AFS_SGI_VNODE_GLUE */
89
90 #endif /* AFS_NAMEI_ENV */
91
92
93 /* minimum size of string to hand to PrintInode */
94 #define AFS_INO_STR_LENGTH 32
95 typedef char afs_ino_str_t[AFS_INO_STR_LENGTH];
96
97 /* Print either 32 or 64 bit inode numbers. char * may be NULL. In which case
98  * a local statis is returned.
99  */
100 #ifdef AFS_64BIT_IOPS_ENV
101 extern char *PrintInode(afs_ino_str_t, Inode);
102 #else
103 extern char *PrintInode();
104 #endif
105
106 /* Some places in the code assume icreate can return 0 when there's
107  * an error.
108  */
109 #define VALID_INO(I) ((I) != (Inode)-1 && (I) != (Inode)0)
110
111 #ifndef AFS_NAMEI_ENV
112
113 /* Definitions of inode macros. */
114 #ifdef AFS_SGI_XFS_IOPS_ENV
115 #ifdef AFS_DEBUG_IOPS
116 #define ICREATE(DEV, NAME, NI, P0, P1, P2, P3) \
117          debug_icreatename64(DEV, NAME, P0, P1, P2, P3, __FILE__, __LINE__)
118 #define IDEC(DEV, INO, VID)     debug_idec64(DEV, INO, VID, __FILE__, __LINE__)
119 #define IINC(DEV, INO, VID)     debug_iinc64(DEV, INO, VID, __FILE__, __LINE__)
120 #define IOPEN(DEV, INO, MODE) debug_iopen64(DEV, INO, MODE, __FILE__, __LINE__)
121 #else
122 #define ICREATE(DEV, NAME, NI, P0, P1, P2, P3) \
123                 icreatename64(DEV, NAME, P0, P1, P2, P3)
124 #define IDEC(DEV, INO, VID)     idec64(DEV, INO, VID)
125 #define IINC(DEV, INO, VID)     iinc64(DEV, INO, VID)
126 #define IOPEN(DEV, INO, MODE)   iopen64(DEV, INO, MODE)
127 #endif
128 #define AFS_IOPS_DEFINED 1
129 #endif /* AFS_SGI_IOPS_ENV */
130
131
132 #ifndef AFS_IOPS_DEFINED
133 #ifdef AFS_DEBUG_IOPS
134 #else
135 #define ICREATE(DEV, NAME, NI, P0, P1, P2, P3) \
136         icreate(DEV, NI, P0, P1, P2, P3)
137 #define IDEC(DEV, INO, VID)     idec(DEV, INO, VID)
138 #define IINC(DEV, INO, VID)     iinc(DEV, INO, VID)
139 #define IOPEN(DEV, INO, MODE)   iopen(DEV, INO, MODE)
140 #endif
141 #endif /* AFS_IOPS_DEFINED */
142
143
144 #endif /* AFS_NAMEI_ENV */
145
146 /* Declarations for lsetpag and lpioctl */
147 int     lsetpag(void);
148 int     lpioctl(char *path, int cmd, char *cmarg, int follow);
149
150 #endif /* AFS_NT40_ENV */
151
152 #endif /* AFS_AFSSYSCALLS_H */