1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI_GENERIC_STATFS_H
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI_GENERIC_STATFS_H
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Most 64-bit platforms use 'long', while most 32-bit platforms use '__u32'.
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Yes, they differ in signedness as well as size.
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Special cases can override it for themselves -- except for S390x, which
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * is just a little too special for us. And MIPS, which I'm not touching
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * with a 10' pole.
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __statfs_word
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#if __BITS_PER_LONG == 64
16e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define __statfs_word __kernel_long_t
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#else
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __statfs_word __u32
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct statfs {
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_type;
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_bsize;
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_blocks;
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_bfree;
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_bavail;
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_files;
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_ffree;
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_fsid_t f_fsid;
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_namelen;
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_frsize;
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_flags;
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_spare[4];
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * ARM needs to avoid the 32-bit padding at the end, for consistency
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * between EABI and OABI
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef ARCH_PACK_STATFS64
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define ARCH_PACK_STATFS64
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct statfs64 {
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_type;
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_bsize;
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_blocks;
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_bfree;
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_bavail;
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_files;
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_ffree;
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_fsid_t f_fsid;
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_namelen;
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_frsize;
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_flags;
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__statfs_word f_spare[4];
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng} ARCH_PACK_STATFS64;
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * IA64 and x86_64 need to avoid the 32-bit padding at the end,
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * to be compatible with the i386 ABI
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef ARCH_PACK_COMPAT_STATFS64
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define ARCH_PACK_COMPAT_STATFS64
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct compat_statfs64 {
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 f_type;
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 f_bsize;
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_blocks;
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_bfree;
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_bavail;
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_files;
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64 f_ffree;
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__kernel_fsid_t f_fsid;
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 f_namelen;
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 f_frsize;
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 f_flags;
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32 f_spare[4];
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng} ARCH_PACK_COMPAT_STATFS64;
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI_GENERIC_STATFS_H */
84