/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos72Q src/bos/kernel/sys/statfs.h 1.17.1.1                            */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 1985,2019              */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/* @(#)17	1.17.1.1  src/bos/kernel/sys/statfs.h, syslfs, bos72Q, q2019_13A4 2/6/19 00:41:59  */
/*
 * COMPONENT_NAME: (SYSLFS) Logical File System
 *
 * FUNCTIONS: statfs header
 *
 * ORIGINS: 27
 *
 * (C) COPYRIGHT International Business Machines Corp. 1985, 1993
 * All Rights Reserved
 * Licensed Materials - Property of IBM
 *
 * US Government Users Restricted Rights - Use, duplication or
 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 */

#ifndef _H_STATFS
#define _H_STATFS

#include <sys/types.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * statfs.h - statfs system call return structure
 */

/*
 * file system statistics
 * NOTE: f_version is UNUSED NOW, but should be set to 0!
 * NOTE: all other reserved fields should be cleared by the vfs implementation
 */
struct statfs {
	int f_version;		/* version/type of statfs, 0 for now */
	int f_type;		/* type of info, zero for now */
	ulong_t f_bsize;	/* optimal file system block size */
	fsblkcnt_t f_blocks;	/* total data blocks in file system */
	fsblkcnt_t f_bfree;	/* free block in fs */
	fsblkcnt_t f_bavail;	/* free blocks avail to non-superuser */
	fsfilcnt_t f_files;	/* total file nodes in file system */
	fsfilcnt_t f_ffree;	/* free file nodes in fs */
#if !defined(_KERNEL) && defined(__64BIT__)
	fsid64_t f_fsid;	/* file system id */
#else
	fsid_t f_fsid;		/* file system id */
#endif
	int f_vfstype;		/* what type of vfs this is */
	ulong_t f_fsize;	/* fundamental file system block size */
	int f_vfsnumber;	/* vfs indentifier number */
	int f_vfsoff;		/* reserved, for vfs specific data offset */
	int f_vfslen;		/* reserved, for len of vfs specific data */
	int f_vfsvers;		/* reserved, for vers of vfs specific data */
	char f_fname[32];	/* file system name (usually mount pt.) */
	char f_fpack[32];	/* file system pack name */
	int f_name_max;	/* maximum component name length for posix */
};

/* This is a view of the 32-bit program statfs structure inside 64BK.
 */
#if defined(_KERNEL) && defined(__64BIT_KERNEL)
struct statfs32 {
        int       f_version;    /* version/type of statfs, 0 for now */
        int       f_type;       /* type of info, zero for now */
        uint      f_bsize;      /* optimal file system block size */
        uint      f_blocks;     /* total data blocks in file system */
        uint      f_bfree;      /* free block in fs */
        uint      f_bavail;     /* free blocks avail to non-superuser */
        uint      f_files;      /* total file nodes in file system */
        uint      f_ffree;      /* free file nodes in fs */
        fsid32_t  f_fsid;       /* file system id */
        int       f_vfstype;    /* what type of vfs this is */
        uint      f_fsize;      /* fundamental file system block size */
        int       f_vfsnumber;  /* vfs indentifier number */
        int       f_vfsoff;     /* reserved, for vfs specific data offset */
        int       f_vfslen;     /* reserved, for len of vfs specific data */
        int       f_vfsvers;    /* reserved, for vers of vfs specific data */
        char      f_fname[32];  /* file system name (usually mount pt.) */
        char      f_fpack[32];  /* file system pack name */
        int       f_name_max;   /* maximum component name length for posix */
};
#endif /* _KERNEL && __64BIT_KERNEL */

/* This statfs64 structure providing invariant 64-bit fields.
 */
struct statfs64 {
        int         f_version;   /* version/type of statfs, 0 for now */
        int         f_type;      /* type of info, zero for now */
        blksize64_t f_bsize;     /* optimal file system block size */
        blkcnt64_t  f_blocks;    /* total data blocks in file system */
        blkcnt64_t  f_bfree;     /* free block in fs */
        blkcnt64_t  f_bavail;    /* free blocks avail to non-superuser */
        uint64_t    f_files;     /* total file nodes in file system */
        uint64_t    f_ffree;     /* free file nodes in fs */
        fsid64_t    f_fsid;      /* file system id */
        int         f_vfstype;   /* what type of vfs this is */
        blksize64_t f_fsize;     /* fundamental file system block size */
        int         f_vfsnumber; /* vfs indentifier number */
        int         f_vfsoff;    /* reserved, for vfs specific data offset */
        int         f_vfslen;    /* reserved, for len of vfs specific data */
        int         f_vfsvers;   /* reserved, for vers of vfs specific data */
        char        f_fname[32]; /* file system name (usually mount pt.) */
        char        f_fpack[32]; /* file system pack name */
        int         f_name_max;  /* maximum component name length for posix */
};

#ifndef _KERNEL
#ifdef _NO_PROTO
extern int statfs();
extern int fstatfs();
extern int statfs64();
extern int fstatfs64();
#else
extern int statfs(char *, struct statfs *);
extern int fstatfs(int, struct statfs *);
extern int statfs64(char *, struct statfs64 *);
extern int fstatfs64(int, struct statfs64 *);
#endif /* _NO_PROTO */
#endif /* _KERNEL */

#ifdef __cplusplus
}
#endif

#endif /* _H_STATFS */
