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