1 /* 2 * Copyright (C) 2017 Hangzhou C-SKY Microsystems co.,ltd. 3 * 4 * Licensed under the LGPL v2.1 or later, see the file COPYING.LIB 5 * in this tarball. 6 */ 7 8 #ifndef _SYS_SHM_H 9 # error "Never include <bits/shm.h> directly; use <sys/shm.h> instead." 10 #endif 11 12 #include <bits/types.h> 13 14 /* Permission flag for shmget. */ 15 #define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */ 16 #define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */ 17 18 /* Flags for `shmat'. */ 19 #define SHM_RDONLY 010000 /* attach read-only else read-write */ 20 #define SHM_RND 020000 /* round attach address to SHMLBA */ 21 #define SHM_REMAP 040000 /* take-over region on attach */ 22 23 /* Commands for `shmctl'. */ 24 #define SHM_LOCK 11 /* lock segment (root only) */ 25 #define SHM_UNLOCK 12 /* unlock segment (root only) */ 26 27 __BEGIN_DECLS 28 29 /* Segment low boundary address multiple. */ 30 #define SHMLBA (__getpagesize () << 2) 31 extern int __getpagesize (void) __THROW __attribute__ ((__const__)); 32 33 34 /* Type to count number of attaches. */ 35 typedef unsigned long int shmatt_t; 36 37 /* Data structure describing a set of semaphores. */ 38 struct shmid_ds 39 { 40 struct ipc_perm shm_perm; /* operation permission struct */ 41 size_t shm_segsz; /* size of segment in bytes */ 42 __time_t shm_atime; /* time of last shmat() */ 43 unsigned long int __uclibc_unused1; 44 __time_t shm_dtime; /* time of last shmdt() */ 45 unsigned long int __uclibc_unused2; 46 __time_t shm_ctime; /* time of last change by shmctl() */ 47 unsigned long int __uclibc_unused3; 48 __pid_t shm_cpid; /* pid of creator */ 49 __pid_t shm_lpid; /* pid of last shmop */ 50 shmatt_t shm_nattch; /* number of current attaches */ 51 unsigned long int __uclibc_unused4; 52 unsigned long int __uclibc_unused5; 53 }; 54 55 #ifdef __USE_MISC 56 57 /* ipcs ctl commands */ 58 # define SHM_STAT 13 59 # define SHM_INFO 14 60 61 /* shm_mode upper byte flags */ 62 # define SHM_DEST 01000 /* segment will be destroyed on last detach */ 63 # define SHM_LOCKED 02000 /* segment will not be swapped */ 64 # define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ 65 # define SHM_NORESERVE 010000 /* don't check for reservations */ 66 67 struct shminfo 68 { 69 unsigned long int shmmax; 70 unsigned long int shmmin; 71 unsigned long int shmmni; 72 unsigned long int shmseg; 73 unsigned long int shmall; 74 unsigned long int __uclibc_unused1; 75 unsigned long int __uclibc_unused2; 76 unsigned long int __uclibc_unused3; 77 unsigned long int __uclibc_unused4; 78 }; 79 80 struct shm_info 81 { 82 int used_ids; 83 unsigned long int shm_tot; /* total allocated shm */ 84 unsigned long int shm_rss; /* total resident shm */ 85 unsigned long int shm_swp; /* total swapped shm */ 86 unsigned long int swap_attempts; 87 unsigned long int swap_successes; 88 }; 89 90 #endif /* __USE_MISC */ 91 92 __END_DECLS 93