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 	long		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 	long		st_atime;
36 	long		st_atime_nsec;
37 	long		st_mtime;
38 	long		st_mtime_nsec;
39 	long		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 	long		st_atime;
74 	unsigned long	st_atime_nsec;	/* Reserved for st_atime expansion  */
75 
76 	long		st_mtime;
77 	unsigned long	st_mtime_nsec;	/* Reserved for st_mtime expansion  */
78 
79 	long		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 	long			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