xref: /OK3568_Linux_fs/kernel/include/uapi/asm-generic/shmbuf.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun #ifndef __ASM_GENERIC_SHMBUF_H
3*4882a593Smuzhiyun #define __ASM_GENERIC_SHMBUF_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <asm/bitsperlong.h>
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun /*
8*4882a593Smuzhiyun  * The shmid64_ds structure for x86 architecture.
9*4882a593Smuzhiyun  * Note extra padding because this structure is passed back and forth
10*4882a593Smuzhiyun  * between kernel and user space.
11*4882a593Smuzhiyun  *
12*4882a593Smuzhiyun  * shmid64_ds was originally meant to be architecture specific, but
13*4882a593Smuzhiyun  * everyone just ended up making identical copies without specific
14*4882a593Smuzhiyun  * optimizations, so we may just as well all use the same one.
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  * 64 bit architectures use a 64-bit long time field here, while
17*4882a593Smuzhiyun  * 32 bit architectures have a pair of unsigned long values.
18*4882a593Smuzhiyun  * On big-endian systems, the lower half is in the wrong place.
19*4882a593Smuzhiyun  *
20*4882a593Smuzhiyun  *
21*4882a593Smuzhiyun  * Pad space is left for:
22*4882a593Smuzhiyun  * - 2 miscellaneous 32-bit values
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun struct shmid64_ds {
26*4882a593Smuzhiyun 	struct ipc64_perm	shm_perm;	/* operation perms */
27*4882a593Smuzhiyun 	size_t			shm_segsz;	/* size of segment (bytes) */
28*4882a593Smuzhiyun #if __BITS_PER_LONG == 64
29*4882a593Smuzhiyun 	long			shm_atime;	/* last attach time */
30*4882a593Smuzhiyun 	long			shm_dtime;	/* last detach time */
31*4882a593Smuzhiyun 	long			shm_ctime;	/* last change time */
32*4882a593Smuzhiyun #else
33*4882a593Smuzhiyun 	unsigned long		shm_atime;	/* last attach time */
34*4882a593Smuzhiyun 	unsigned long		shm_atime_high;
35*4882a593Smuzhiyun 	unsigned long		shm_dtime;	/* last detach time */
36*4882a593Smuzhiyun 	unsigned long		shm_dtime_high;
37*4882a593Smuzhiyun 	unsigned long		shm_ctime;	/* last change time */
38*4882a593Smuzhiyun 	unsigned long		shm_ctime_high;
39*4882a593Smuzhiyun #endif
40*4882a593Smuzhiyun 	__kernel_pid_t		shm_cpid;	/* pid of creator */
41*4882a593Smuzhiyun 	__kernel_pid_t		shm_lpid;	/* pid of last operator */
42*4882a593Smuzhiyun 	unsigned long		shm_nattch;	/* no. of current attaches */
43*4882a593Smuzhiyun 	unsigned long		__unused4;
44*4882a593Smuzhiyun 	unsigned long		__unused5;
45*4882a593Smuzhiyun };
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun struct shminfo64 {
48*4882a593Smuzhiyun 	unsigned long		shmmax;
49*4882a593Smuzhiyun 	unsigned long		shmmin;
50*4882a593Smuzhiyun 	unsigned long		shmmni;
51*4882a593Smuzhiyun 	unsigned long		shmseg;
52*4882a593Smuzhiyun 	unsigned long		shmall;
53*4882a593Smuzhiyun 	unsigned long		__unused1;
54*4882a593Smuzhiyun 	unsigned long		__unused2;
55*4882a593Smuzhiyun 	unsigned long		__unused3;
56*4882a593Smuzhiyun 	unsigned long		__unused4;
57*4882a593Smuzhiyun };
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun #endif /* __ASM_GENERIC_SHMBUF_H */
60