Home | History | Annotate | Download | only in asm
      1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
      2 /*
      3  * This file is subject to the terms and conditions of the GNU General Public
      4  * License.  See the file "COPYING" in the main directory of this archive
      5  * for more details.
      6  *
      7  * Copyright (C) 1995, 1999, 2000 Ralf Baechle
      8  * Copyright (C) 2000 Silicon Graphics, Inc.
      9  */
     10 #ifndef _ASM_STAT_H
     11 #define _ASM_STAT_H
     12 
     13 #include <linux/types.h>
     14 
     15 #include <asm/sgidefs.h>
     16 
     17 #if (_MIPS_SIM == _MIPS_SIM_ABI32) || (_MIPS_SIM == _MIPS_SIM_NABI32)
     18 
     19 struct stat {
     20 	unsigned	st_dev;
     21 	long		st_pad1[3];		/* Reserved for network id */
     22 	ino_t		st_ino;
     23 	mode_t		st_mode;
     24 	__u32		st_nlink;
     25 	uid_t		st_uid;
     26 	gid_t		st_gid;
     27 	unsigned	st_rdev;
     28 	long		st_pad2[2];
     29 	off_t		st_size;
     30 	long		st_pad3;
     31 	/*
     32 	 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
     33 	 * but we don't have it under Linux.
     34 	 */
     35 	time_t		st_atime;
     36 	long		st_atime_nsec;
     37 	time_t		st_mtime;
     38 	long		st_mtime_nsec;
     39 	time_t		st_ctime;
     40 	long		st_ctime_nsec;
     41 	long		st_blksize;
     42 	long		st_blocks;
     43 	long		st_pad4[14];
     44 };
     45 
     46 /*
     47  * This matches struct stat64 in glibc2.1, hence the absolutely insane
     48  * amounts of padding around dev_t's.  The memory layout is the same as of
     49  * struct stat of the 64-bit kernel.
     50  */
     51 
     52 struct stat64 {
     53 	unsigned long	st_dev;
     54 	unsigned long	st_pad0[3];	/* Reserved for st_dev expansion  */
     55 
     56 	unsigned long long	st_ino;
     57 
     58 	mode_t		st_mode;
     59 	__u32		st_nlink;
     60 
     61 	uid_t		st_uid;
     62 	gid_t		st_gid;
     63 
     64 	unsigned long	st_rdev;
     65 	unsigned long	st_pad1[3];	/* Reserved for st_rdev expansion  */
     66 
     67 	long long	st_size;
     68 
     69 	/*
     70 	 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
     71 	 * but we don't have it under Linux.
     72 	 */
     73 	time_t		st_atime;
     74 	unsigned long	st_atime_nsec;	/* Reserved for st_atime expansion  */
     75 
     76 	time_t		st_mtime;
     77 	unsigned long	st_mtime_nsec;	/* Reserved for st_mtime expansion  */
     78 
     79 	time_t		st_ctime;
     80 	unsigned long	st_ctime_nsec;	/* Reserved for st_ctime expansion  */
     81 
     82 	unsigned long	st_blksize;
     83 	unsigned long	st_pad2;
     84 
     85 	long long	st_blocks;
     86 };
     87 
     88 #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
     89 
     90 #if _MIPS_SIM == _MIPS_SIM_ABI64
     91 
     92 /* The memory layout is the same as of struct stat64 of the 32-bit kernel.  */
     93 struct stat {
     94 	unsigned int		st_dev;
     95 	unsigned int		st_pad0[3]; /* Reserved for st_dev expansion */
     96 
     97 	unsigned long		st_ino;
     98 
     99 	mode_t			st_mode;
    100 	__u32			st_nlink;
    101 
    102 	uid_t			st_uid;
    103 	gid_t			st_gid;
    104 
    105 	unsigned int		st_rdev;
    106 	unsigned int		st_pad1[3]; /* Reserved for st_rdev expansion */
    107 
    108 	off_t			st_size;
    109 
    110 	/*
    111 	 * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
    112 	 * but we don't have it under Linux.
    113 	 */
    114 	unsigned int		st_atime;
    115 	unsigned int		st_atime_nsec;
    116 
    117 	unsigned int		st_mtime;
    118 	unsigned int		st_mtime_nsec;
    119 
    120 	unsigned int		st_ctime;
    121 	unsigned int		st_ctime_nsec;
    122 
    123 	unsigned int		st_blksize;
    124 	unsigned int		st_pad2;
    125 
    126 	unsigned long		st_blocks;
    127 };
    128 
    129 #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
    130 
    131 #define STAT_HAVE_NSEC 1
    132 
    133 #endif /* _ASM_STAT_H */
    134