#ifndef __ASM_GENERIC_STAT_H
#define __ASM_GENERIC_STAT_H

/*
 * Everybody gets this wrong and has to stick with it for all
 * eternity. Hopefully, this version gets used by new architectures
 * so they don't fall into the same traps.
 *
 * stat64 is copied from powerpc64, with explicit padding added.
 * stat is the same structure layout on 64-bit, without the 'long long'
 * types.
 *
 * By convention, 64 bit architectures use the stat interface, while
 * 32 bit architectures use the stat64 interface. Note that we don't
 * provide an __old_kernel_stat here, which new architecture should
 * not have to start with.
 */

#include <asm/bitsperlong.h>

#define STAT_HAVE_NSEC 1

struct stat {
        unsigned long        st_dev;                /* Device.  */
        unsigned long        st_ino;                /* File serial number.  */
        unsigned int        st_mode;        /* File mode.  */
        unsigned int        st_nlink;        /* Link count.  */
        unsigned int        st_uid;                /* User ID of the file's owner.  */
        unsigned int        st_gid;                /* Group ID of the file's group. */
        unsigned long        st_rdev;        /* Device number, if device.  */
        unsigned long        __pad1;
        long                st_size;        /* Size of file, in bytes.  */
        int                st_blksize;        /* Optimal block size for I/O.  */
        int                __pad2;
        long                st_blocks;        /* Number 512-byte blocks allocated. */
        int                st_atime;        /* Time of last access.  */
        unsigned int        st_atime_nsec;
        int                st_mtime;        /* Time of last modification.  */
        unsigned int        st_mtime_nsec;
        int                st_ctime;        /* Time of last status change.  */
        unsigned int        st_ctime_nsec;
        unsigned int        __unused4;
        unsigned int        __unused5;
};

#if __BITS_PER_LONG != 64
/* This matches struct stat64 in glibc2.1. Only used for 32 bit. */
struct stat64 {
        unsigned long long st_dev;        /* Device.  */
        unsigned long long st_ino;        /* File serial number.  */
        unsigned int        st_mode;        /* File mode.  */
        unsigned int        st_nlink;        /* Link count.  */
        unsigned int        st_uid;                /* User ID of the file's owner.  */
        unsigned int        st_gid;                /* Group ID of the file's group. */
        unsigned long long st_rdev;        /* Device number, if device.  */
        unsigned long long __pad1;
        long long        st_size;        /* Size of file, in bytes.  */
        int                st_blksize;        /* Optimal block size for I/O.  */
        int                __pad2;
        long long        st_blocks;        /* Number 512-byte blocks allocated. */
        int                st_atime;        /* Time of last access.  */
        unsigned int        st_atime_nsec;
        int                st_mtime;        /* Time of last modification.  */
        unsigned int        st_mtime_nsec;
        int                st_ctime;        /* Time of last status change.  */
        unsigned int        st_ctime_nsec;
        unsigned int        __unused4;
        unsigned int        __unused5;
};
#endif

#endif /* __ASM_GENERIC_STAT_H */