1*53ee8cc1Swenshuai.xi #ifndef _LINUX_SHM_H_ 2*53ee8cc1Swenshuai.xi #define _LINUX_SHM_H_ 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi #include <linux/ipc.h> 5*53ee8cc1Swenshuai.xi #include <linux/errno.h> 6*53ee8cc1Swenshuai.xi #include <unistd.h> 7*53ee8cc1Swenshuai.xi 8*53ee8cc1Swenshuai.xi /* 9*53ee8cc1Swenshuai.xi * SHMMAX, SHMMNI and SHMALL are upper limits are defaults which can 10*53ee8cc1Swenshuai.xi * be increased by sysctl 11*53ee8cc1Swenshuai.xi */ 12*53ee8cc1Swenshuai.xi 13*53ee8cc1Swenshuai.xi #define SHMMAX 0x2000000 /* max shared seg size (bytes) */ 14*53ee8cc1Swenshuai.xi #define SHMMIN 1 /* min shared seg size (bytes) */ 15*53ee8cc1Swenshuai.xi #define SHMMNI 4096 /* max num of segs system wide */ 16*53ee8cc1Swenshuai.xi #define SHMALL (SHMMAX/getpagesize()*(SHMMNI/16)) 17*53ee8cc1Swenshuai.xi #define SHMSEG SHMMNI /* max shared segs per process */ 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi 20*53ee8cc1Swenshuai.xi /* Obsolete, used only for backwards compatibility and libc5 compiles */ 21*53ee8cc1Swenshuai.xi struct shmid_ds { 22*53ee8cc1Swenshuai.xi struct ipc_perm shm_perm; /* operation perms */ 23*53ee8cc1Swenshuai.xi int shm_segsz; /* size of segment (bytes) */ 24*53ee8cc1Swenshuai.xi __kernel_time_t shm_atime; /* last attach time */ 25*53ee8cc1Swenshuai.xi __kernel_time_t shm_dtime; /* last detach time */ 26*53ee8cc1Swenshuai.xi __kernel_time_t shm_ctime; /* last change time */ 27*53ee8cc1Swenshuai.xi __kernel_ipc_pid_t shm_cpid; /* pid of creator */ 28*53ee8cc1Swenshuai.xi __kernel_ipc_pid_t shm_lpid; /* pid of last operator */ 29*53ee8cc1Swenshuai.xi unsigned short shm_nattch; /* no. of current attaches */ 30*53ee8cc1Swenshuai.xi unsigned short shm_unused; /* compatibility */ 31*53ee8cc1Swenshuai.xi void *shm_unused2; /* ditto - used by DIPC */ 32*53ee8cc1Swenshuai.xi void *shm_unused3; /* unused */ 33*53ee8cc1Swenshuai.xi }; 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi /* Include the definition of shmid64_ds and shminfo64 */ 36*53ee8cc1Swenshuai.xi #include <asm/shmbuf.h> 37*53ee8cc1Swenshuai.xi 38*53ee8cc1Swenshuai.xi /* permission flag for shmget */ 39*53ee8cc1Swenshuai.xi #define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */ 40*53ee8cc1Swenshuai.xi #define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */ 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi /* mode for attach */ 43*53ee8cc1Swenshuai.xi #define SHM_RDONLY 010000 /* read-only access */ 44*53ee8cc1Swenshuai.xi #define SHM_RND 020000 /* round attach address to SHMLBA boundary */ 45*53ee8cc1Swenshuai.xi #define SHM_REMAP 040000 /* take-over region on attach */ 46*53ee8cc1Swenshuai.xi #define SHM_EXEC 0100000 /* execution access */ 47*53ee8cc1Swenshuai.xi 48*53ee8cc1Swenshuai.xi /* super user shmctl commands */ 49*53ee8cc1Swenshuai.xi #define SHM_LOCK 11 50*53ee8cc1Swenshuai.xi #define SHM_UNLOCK 12 51*53ee8cc1Swenshuai.xi 52*53ee8cc1Swenshuai.xi /* ipcs ctl commands */ 53*53ee8cc1Swenshuai.xi #define SHM_STAT 13 54*53ee8cc1Swenshuai.xi #define SHM_INFO 14 55*53ee8cc1Swenshuai.xi 56*53ee8cc1Swenshuai.xi /* Obsolete, used only for backwards compatibility */ 57*53ee8cc1Swenshuai.xi struct shminfo { 58*53ee8cc1Swenshuai.xi int shmmax; 59*53ee8cc1Swenshuai.xi int shmmin; 60*53ee8cc1Swenshuai.xi int shmmni; 61*53ee8cc1Swenshuai.xi int shmseg; 62*53ee8cc1Swenshuai.xi int shmall; 63*53ee8cc1Swenshuai.xi }; 64*53ee8cc1Swenshuai.xi 65*53ee8cc1Swenshuai.xi struct shm_info { 66*53ee8cc1Swenshuai.xi int used_ids; 67*53ee8cc1Swenshuai.xi unsigned long shm_tot; /* total allocated shm */ 68*53ee8cc1Swenshuai.xi unsigned long shm_rss; /* total resident shm */ 69*53ee8cc1Swenshuai.xi unsigned long shm_swp; /* total swapped shm */ 70*53ee8cc1Swenshuai.xi unsigned long swap_attempts; 71*53ee8cc1Swenshuai.xi unsigned long swap_successes; 72*53ee8cc1Swenshuai.xi }; 73*53ee8cc1Swenshuai.xi 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi #endif /* _LINUX_SHM_H_ */ 76