]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blame - include/irix.h
Revert "Merge branch 'xfsprogs-dev'"
[thirdparty/xfsprogs-dev.git] / include / irix.h
CommitLineData
c0211f67 1/*
714bd9e5 2 * Copyright (c) 2000-2006 Silicon Graphics, Inc.
f302e9e4 3 * All Rights Reserved.
c0211f67 4 *
f302e9e4
NS
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public License
7 * as published by the Free Software Foundation.
c0211f67 8 *
f302e9e4
NS
9 * This program is distributed in the hope that it would be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU Lesser General Public License for more details.
c0211f67 13 *
f302e9e4
NS
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this program; if not, write the Free Software Foundation,
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
c0211f67
NS
17 */
18#ifndef __XFS_IRIX_H__
19#define __XFS_IRIX_H__
20
eb0c6f87
TS
21#include <stdlib.h>
22#include <unistd.h>
c0211f67
NS
23#include <libgen.h>
24#include <values.h>
25#include <strings.h>
26#include <inttypes.h>
eb0c6f87
TS
27#include <limits.h>
28#include <fcntl.h>
c0211f67
NS
29#include <sys/stat.h>
30#include <sys/uuid.h>
31#include <sys/param.h>
32#include <sys/ioctl.h>
33#include <sys/types.h>
34#include <sys/statfs.h>
35#include <sys/statvfs.h>
36#include <sys/syssgi.h>
37#include <sys/sysmacros.h>
38#include <sys/fs/xfs_fsops.h>
5ecb3de2 39#include <sys/fs/xfs_itable.h>
c0211f67 40
c0211f67
NS
41#define __int8_t char
42#define __int16_t short
43#define __uint8_t unsigned char
44#define __uint16_t unsigned short
45#define loff_t off64_t
46typedef off64_t xfs_off_t;
47typedef __int64_t xfs_ino_t;
48typedef __int32_t xfs_dev_t;
49typedef __int64_t xfs_daddr_t;
50typedef char* xfs_caddr_t;
eb0c6f87
TS
51
52#define xfs_flock64 flock64
53#define xfs_flock64_t struct flock64
54
55typedef struct xfs_error_injection {
8967ee43
TS
56 __int32_t fd;
57 __int32_t errtag;
eb0c6f87
TS
58} xfs_error_injection_t;
59
8967ee43 60/* --- xfs_fsop_*req - request data structures --- */
eb0c6f87
TS
61
62typedef struct xfs_fsop_bulkreq {
8967ee43
TS
63 ino64_t *lastip;
64 __int32_t icount;
65 xfs_bstat_t *ubuffer;
66 __int32_t *ocount;
eb0c6f87 67} xfs_fsop_bulkreq_t;
c0211f67 68
8967ee43
TS
69typedef struct xfs_fsop_handlereq {
70 __u32 fd; /* fd for FD_TO_HANDLE */
71 void *path; /* user pathname */
72 __u32 oflags; /* open flags */
73 void *ihandle; /* user supplied handle */
74 __u32 ihandlen; /* user supplied length */
75 void *ohandle; /* user buffer for handle */
76 __u32 *ohandlen; /* user buffer length */
77} xfs_fsop_handlereq_t;
78
79typedef struct xfs_fsop_setdm_handlereq {
80 struct xfs_fsop_handlereq hreq; /* handle information */
81 struct fsdmidata *data; /* DMAPI data */
82} xfs_fsop_setdm_handlereq_t;
83
84typedef struct xfs_attrlist_cursor {
85 __u32 opaque[4];
86} xfs_attrlist_cursor_t;
87
88typedef struct xfs_fsop_attrlist_handlereq {
89 struct xfs_fsop_handlereq hreq; /* handle interface structure */
90 struct xfs_attrlist_cursor pos; /* opaque cookie, list offset */
91 __u32 flags; /* which namespace to use */
92 __u32 buflen; /* length of buffer supplied */
93 void *buffer; /* returned names */
94} xfs_fsop_attrlist_handlereq_t;
95
258b00ea
TS
96typedef struct xfs_fsop_getparents_handlereq {
97 struct xfs_fsop_handlereq hreq; /* handle interface structure */
98 struct xfs_attrlist_cursor pos; /* opaque cookie, list offset */
99 __u32 buflen; /* length of buffer supplied */
100 void *buffer; /* returned data */
101 __u32 *ocount; /* return number of links */
102 __u32 *omore; /* return whether more to come */
103} xfs_fsop_getparents_handlereq_t;
104
8967ee43
TS
105typedef struct xfs_attr_multiop {
106 __u32 am_opcode;
107 __s32 am_error;
108 void *am_attrname;
109 void *am_attrvalue;
110 __u32 am_length;
111 __u32 am_flags;
112} xfs_attr_multiop_t;
113
114typedef struct xfs_fsop_attrmulti_handlereq {
115 struct xfs_fsop_handlereq hreq; /* handle interface structure */
116 __u32 opcount;/* count of following multiop */
117 struct xfs_attr_multiop *ops; /* attr_multi data */
118} xfs_fsop_attrmulti_handlereq_t;
119
d3a8db8a
TS
120/* start doing packed stuctures here */
121#define HAVE_FORMAT32 1
122#pragma pack 1
123typedef struct xfs_inode_log_format_32 {
124 __u16 ilf_type; /* inode log item type */
125 __u16 ilf_size; /* size of this item */
126 __u32 ilf_fields; /* flags for fields logged */
127 __u16 ilf_asize; /* size of attr d/ext/root */
128 __u16 ilf_dsize; /* size of data/ext/root */
129 __u64 ilf_ino; /* inode number */
130 union {
131 __u32 ilfu_rdev; /* rdev value for dev inode*/
132 uuid_t ilfu_uuid; /* mount point value */
133 } ilf_u;
134 __s64 ilf_blkno; /* blkno of inode buffer */
135 __s32 ilf_len; /* len of inode buffer */
136 __s32 ilf_boffset; /* off of inode in buffer */
137} xfs_inode_log_format_32_t;
138
139typedef struct xfs_extent_32 {
140 __u64 ext_start;
141 __u32 ext_len;
142} xfs_extent_32_t;
143
144typedef struct xfs_efi_log_format_32 {
145 __u16 efi_type; /* efi log item type */
146 __u16 efi_size; /* size of this item */
147 __u32 efi_nextents; /* # extents to free */
148 __u64 efi_id; /* efi identifier */
149 xfs_extent_32_t efi_extents[1]; /* array of extents to free */
150} xfs_efi_log_format_32_t;
151
152typedef struct xfs_efd_log_format_32 {
153 __u16 efd_type; /* efd log item type */
154 __u16 efd_size; /* size of this item */
155 __u32 efd_nextents; /* # of extents freed */
156 __u64 efd_efi_id; /* id of corresponding efi */
157 xfs_extent_32_t efd_extents[1]; /* array of extents freed */
158} xfs_efd_log_format_32_t;
159
160#pragma pack 0
161/* end of packed stuctures */
8967ee43 162
c0211f67
NS
163#include <sys/endian.h>
164#define __BYTE_ORDER BYTE_ORDER
165#define __BIG_ENDIAN BIG_ENDIAN
166#define __LITTLE_ENDIAN LITTLE_ENDIAN
5ecb3de2
NS
167
168/* Map some gcc macros for the MipsPRO compiler */
169#ifndef __GNUC__
1552a820
NS
170#define __builtin_constant_p(x) (0)
171#define __FUNCTION__ "XFS"
5ecb3de2
NS
172#define __sgi__ __sgi
173#define __inline__ __inline
2a1888c5 174#define inline __inline
5ecb3de2 175#endif
c0211f67 176
c0211f67 177#define constpp char * const *
c0211f67 178
8967ee43 179/*ARGSUSED*/
eb0c6f87 180static __inline__ int xfsctl(const char *path, int fd, int cmd, void *arg)
c0211f67 181{
eb0c6f87
TS
182 if (cmd >= 0 && cmd < XFS_FSOPS_COUNT) {
183 /*
184 * We have a problem in that xfsctl takes 1 arg but
185 * some sgi xfs ops take an input arg and/or an output arg
186 * So have to special case the ops to decide if xfsctl arg
187 * is an input or an output argument.
188 */
189 if (cmd == XFS_FS_GOINGDOWN)
190 return syssgi(SGI_XFS_FSOPERATIONS, fd, cmd, arg, 0);
191 return syssgi(SGI_XFS_FSOPERATIONS, fd, cmd, 0, arg);
192 }
193 switch (cmd) {
9527f2d5 194 case SGI_FS_INUMBERS:
eb0c6f87 195 case SGI_FS_BULKSTAT:
8967ee43 196 return syssgi(cmd, fd,
eb0c6f87
TS
197 ((xfs_fsop_bulkreq_t*)arg)->lastip,
198 ((xfs_fsop_bulkreq_t*)arg)->icount,
199 ((xfs_fsop_bulkreq_t*)arg)->ubuffer,
200 ((xfs_fsop_bulkreq_t*)arg)->ocount);
201 case SGI_FS_BULKSTAT_SINGLE:
8967ee43 202 return syssgi(SGI_FS_BULKSTAT_SINGLE, fd,
eb0c6f87
TS
203 ((xfs_fsop_bulkreq_t*)arg)->lastip,
204 ((xfs_fsop_bulkreq_t*)arg)->ubuffer);
205 case SGI_XFS_INJECT_ERROR:
206 return syssgi(SGI_XFS_INJECT_ERROR,
207 ((xfs_error_injection_t*)arg)->errtag,
208 fd);
209 case SGI_XFS_CLEARALL_ERROR:
210 return syssgi(SGI_XFS_CLEARALL_ERROR, fd);
8967ee43
TS
211 case SGI_PATH_TO_HANDLE:
212 case SGI_PATH_TO_FSHANDLE:
213 return syssgi(cmd,
214 ((xfs_fsop_handlereq_t*)arg)->path,
215 ((xfs_fsop_handlereq_t*)arg)->ohandle,
216 ((xfs_fsop_handlereq_t*)arg)->ohandlen);
217 case SGI_FD_TO_HANDLE:
218 return syssgi(cmd,
219 ((xfs_fsop_handlereq_t*)arg)->fd,
220 ((xfs_fsop_handlereq_t*)arg)->ohandle,
221 ((xfs_fsop_handlereq_t*)arg)->ohandlen);
222 case SGI_OPEN_BY_HANDLE:
223 return syssgi(cmd,
224 ((xfs_fsop_handlereq_t*)arg)->ihandle,
225 ((xfs_fsop_handlereq_t*)arg)->ihandlen,
226 ((xfs_fsop_handlereq_t*)arg)->oflags);
227 case SGI_READLINK_BY_HANDLE:
228 return syssgi(cmd,
229 ((xfs_fsop_handlereq_t*)arg)->ihandle,
230 ((xfs_fsop_handlereq_t*)arg)->ihandlen,
231 ((xfs_fsop_handlereq_t*)arg)->ohandle,
232 ((xfs_fsop_handlereq_t*)arg)->ohandlen);
233 case SGI_ATTR_LIST_BY_HANDLE:
234 return syssgi(cmd,
235 ((xfs_fsop_attrlist_handlereq_t*)arg)->hreq.ihandle,
236 ((xfs_fsop_attrlist_handlereq_t*)arg)->hreq.ihandlen,
237 ((xfs_fsop_attrlist_handlereq_t*)arg)->buffer,
238 ((xfs_fsop_attrlist_handlereq_t*)arg)->buflen,
239 ((xfs_fsop_attrlist_handlereq_t*)arg)->flags,
240 &(((xfs_fsop_attrlist_handlereq_t*)arg)->pos));
258b00ea
TS
241 case SGI_XFS_GETPARENTS:
242 case SGI_XFS_GETPARENTPATHS:
243 return syssgi(cmd,
244 ((xfs_fsop_getparents_handlereq_t*)arg)->hreq.ihandle,
245 ((xfs_fsop_getparents_handlereq_t*)arg)->hreq.ihandlen,
246 ((xfs_fsop_getparents_handlereq_t*)arg)->buffer,
247 ((xfs_fsop_getparents_handlereq_t*)arg)->buflen,
248 &(((xfs_fsop_getparents_handlereq_t*)arg)->pos),
249 ((xfs_fsop_getparents_handlereq_t*)arg)->ocount,
250 ((xfs_fsop_getparents_handlereq_t*)arg)->omore);
8967ee43
TS
251 case SGI_ATTR_MULTI_BY_HANDLE:
252 return syssgi(cmd,
253 ((xfs_fsop_attrmulti_handlereq_t*)arg)->hreq.ihandle,
254 ((xfs_fsop_attrmulti_handlereq_t*)arg)->hreq.ihandlen,
255 ((xfs_fsop_attrmulti_handlereq_t*)arg)->ops,
256 ((xfs_fsop_attrmulti_handlereq_t*)arg)->opcount,
257 ((xfs_fsop_attrmulti_handlereq_t*)arg)->hreq.oflags);
258 case SGI_FSSETDM_BY_HANDLE:
259 return syssgi(cmd,
260 ((xfs_fsop_setdm_handlereq_t*)arg)->hreq.ihandle,
261 ((xfs_fsop_setdm_handlereq_t*)arg)->hreq.ihandlen,
262 ((xfs_fsop_setdm_handlereq_t*)arg)->data);
eb0c6f87
TS
263 }
264 return fcntl(fd, cmd, arg);
c0211f67
NS
265}
266
267static __inline__ int platform_test_xfs_fd(int fd)
268{
269 struct statvfs sbuf;
270 if (fstatvfs(fd, &sbuf) < 0)
271 return 0;
714bd9e5 272 return strncmp(sbuf.f_basetype, "xfs", 4) == 0;
c0211f67
NS
273}
274
275static __inline__ int platform_test_xfs_path(const char *path)
276{
277 struct statvfs sbuf;
278 if (statvfs(path, &sbuf) < 0)
279 return 0;
714bd9e5 280 return strncmp(sbuf.f_basetype, "xfs", 4) == 0;
c0211f67
NS
281}
282
283static __inline__ int platform_fstatfs(int fd, struct statfs *buf)
284{
285 return fstatfs(fd, buf, sizeof(struct statfs), 0);
286}
287
288static __inline__ void platform_getoptreset(void)
289{
290 getoptreset();
291}
292
1552a820
NS
293static __inline__ int platform_uuid_compare(uuid_t *uu1, uuid_t *uu2)
294{
295 uint_t status;
296 return uuid_compare(uu1, uu2, &status);
297}
298
4d32d744 299static __inline__ void platform_uuid_unparse(uuid_t *uu, char *buffer)
1552a820
NS
300{
301 uint_t status;
302 char *s;
303 uuid_to_string(uu, &s, &status);
304 if (status == uuid_s_ok)
4d32d744
NS
305 strcpy(buffer, s);
306 else buffer[0] = '\0';
1552a820
NS
307 free(s);
308}
309
310static __inline__ int platform_uuid_parse(char *buffer, uuid_t *uu)
311{
312 uint_t status;
313 uuid_from_string(buffer, uu, &status);
314 return (status == uuid_s_ok);
315}
316
317static __inline__ int platform_uuid_is_null(uuid_t *uu)
318{
319 uint status;
320 return uuid_is_nil(uu, &status);
321}
322
323static __inline__ void platform_uuid_generate(uuid_t *uu)
324{
325 uint_t status;
326 uuid_create(uu, &status);
327}
328
329static __inline__ void platform_uuid_clear(uuid_t *uu)
330{
331 uint_t status;
332 uuid_create_nil(uu, &status);
333}
334
335static __inline__ void platform_uuid_copy(uuid_t *dst, uuid_t *src)
336{
337 memcpy(dst, src, sizeof(uuid_t));
338}
339
c0211f67
NS
340static __inline__ char * strsep(char **s, const char *ct)
341{
342 char *sbegin = *s, *end;
343
344 if (!sbegin)
345 return NULL;
346 end = strpbrk(sbegin, ct);
347 if (end)
348 *end++ = '\0';
349 *s = end;
350 return sbegin;
351}
352
353#define HAVE_DIOATTR 1
354#define HAVE_FSXATTR 1
355#define HAVE_GETBMAP 1
356#define HAVE_GETBMAPX 1
357#define HAVE_FSDMIDATA 1
358#define HAVE_FID 1
359#define HAVE_IOCMACROS 1
360#define HAVE_BBMACROS 1
361
5ecb3de2 362#define __XFS_FS_H__ 1
c0211f67
NS
363
364#define XFS_IOC_DIOINFO F_DIOINFO
365#define XFS_IOC_FSGETXATTR F_FSGETXATTR
366#define XFS_IOC_FSSETXATTR F_FSSETXATTR
367#define XFS_IOC_ALLOCSP64 F_ALLOCSP64
368#define XFS_IOC_FREESP64 F_FREESP64
369#define XFS_IOC_GETBMAP F_GETBMAP
370#define XFS_IOC_FSSETDM F_FSSETDM
8967ee43 371#define XFS_IOC_RESVSP F_RESVSP
c0211f67 372#define XFS_IOC_RESVSP64 F_RESVSP64
8967ee43 373#define XFS_IOC_UNRESVSP F_UNRESVSP
c0211f67
NS
374#define XFS_IOC_UNRESVSP64 F_UNRESVSP64
375#define XFS_IOC_GETBMAPA F_GETBMAPA
376#define XFS_IOC_FSGETXATTRA F_FSGETXATTRA
377#define XFS_IOC_GETBMAPX F_GETBMAPX
378
379#define XFS_IOC_FSGEOMETRY_V1 XFS_FS_GEOMETRY
8967ee43 380#define XFS_IOC_FSBULKSTAT SGI_FS_BULKSTAT
eb0c6f87 381#define XFS_IOC_FSBULKSTAT_SINGLE SGI_FS_BULKSTAT_SINGLE
9527f2d5 382#define XFS_IOC_FSINUMBERS SGI_FS_INUMBERS
8967ee43
TS
383#define XFS_IOC_PATH_TO_FSHANDLE SGI_PATH_TO_FSHANDLE
384#define XFS_IOC_PATH_TO_HANDLE SGI_PATH_TO_HANDLE
385#define XFS_IOC_FD_TO_HANDLE SGI_FD_TO_HANDLE
386#define XFS_IOC_OPEN_BY_HANDLE SGI_OPEN_BY_HANDLE
387#define XFS_IOC_READLINK_BY_HANDLE SGI_READLINK_BY_HANDLE
c0211f67
NS
388#define XFS_IOC_SWAPEXT /* TODO */
389#define XFS_IOC_FSGROWFSDATA XFS_GROWFS_DATA
390#define XFS_IOC_FSGROWFSLOG XFS_GROWFS_LOG
391#define XFS_IOC_FSGROWFSRT XFS_GROWFS_RT
392#define XFS_IOC_FSCOUNTS XFS_FS_COUNTS
393#define XFS_IOC_SET_RESBLKS XFS_SET_RESBLKS
394#define XFS_IOC_GET_RESBLKS XFS_GET_RESBLKS
eb0c6f87
TS
395#define XFS_IOC_ERROR_INJECTION SGI_XFS_INJECT_ERROR
396#define XFS_IOC_ERROR_CLEARALL SGI_XFS_CLEARALL_ERROR
c0211f67
NS
397#define XFS_IOC_FREEZE XFS_FS_FREEZE
398#define XFS_IOC_THAW XFS_FS_THAW
8967ee43
TS
399#define XFS_IOC_FSSETDM_BY_HANDLE SGI_FSSETDM_BY_HANDLE
400#define XFS_IOC_ATTRLIST_BY_HANDLE SGI_ATTR_LIST_BY_HANDLE
401#define XFS_IOC_ATTRMULTI_BY_HANDLE SGI_ATTR_MULTI_BY_HANDLE
c0211f67
NS
402#define XFS_IOC_FSGEOMETRY XFS_FS_GEOMETRY
403#define XFS_IOC_GOINGDOWN XFS_FS_GOINGDOWN
258b00ea
TS
404#define XFS_IOC_GETPARENTS SGI_XFS_GETPARENTS
405#define XFS_IOC_GETPARENTPATHS SGI_XFS_GETPARENTPATHS
c0211f67 406
cb5b3ef4
MV
407#define _AIOCB64_T_DEFINED 1
408
d3a8db8a
TS
409#define XFS_XFLAG_NODEFRAG 0x00002000
410
c0211f67 411#endif /* __XFS_IRIX_H__ */