1ab60bc84SDmitry Chagin /*- 2ab60bc84SDmitry Chagin * Copyright (c) 2002 Maxim Sobolev <sobomax@FreeBSD.org> 3ab60bc84SDmitry Chagin * All rights reserved. 4ab60bc84SDmitry Chagin * 5ab60bc84SDmitry Chagin * Redistribution and use in source and binary forms, with or without 6ab60bc84SDmitry Chagin * modification, are permitted provided that the following conditions 7ab60bc84SDmitry Chagin * are met: 8ab60bc84SDmitry Chagin * 1. Redistributions of source code must retain the above copyright 9ab60bc84SDmitry Chagin * notice, this list of conditions and the following disclaimer 10ab60bc84SDmitry Chagin * in this position and unchanged. 11ab60bc84SDmitry Chagin * 2. Redistributions in binary form must reproduce the above copyright 12ab60bc84SDmitry Chagin * notice, this list of conditions and the following disclaimer in the 13ab60bc84SDmitry Chagin * documentation and/or other materials provided with the distribution. 14ab60bc84SDmitry Chagin * 3. The name of the author may not be used to endorse or promote products 15ab60bc84SDmitry Chagin * derived from this software without specific prior written permission 16ab60bc84SDmitry Chagin * 17ab60bc84SDmitry Chagin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18ab60bc84SDmitry Chagin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19ab60bc84SDmitry Chagin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20ab60bc84SDmitry Chagin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21ab60bc84SDmitry Chagin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22ab60bc84SDmitry Chagin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23ab60bc84SDmitry Chagin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24ab60bc84SDmitry Chagin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25ab60bc84SDmitry Chagin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26ab60bc84SDmitry Chagin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27ab60bc84SDmitry Chagin */ 28ab60bc84SDmitry Chagin 29ab60bc84SDmitry Chagin #ifndef _LINUX_IPC64_H_ 30ab60bc84SDmitry Chagin #define _LINUX_IPC64_H_ 31ab60bc84SDmitry Chagin 32ab60bc84SDmitry Chagin /* 33ab60bc84SDmitry Chagin * The generic ipc64_perm structure. 34ab60bc84SDmitry Chagin * Note extra padding because this structure is passed back and forth 35ab60bc84SDmitry Chagin * between kernel and user space. 36ab60bc84SDmitry Chagin * 37ab60bc84SDmitry Chagin * Pad space is left for: 38ab60bc84SDmitry Chagin * - 32-bit mode_t on architectures that only had 16 bit 39ab60bc84SDmitry Chagin * - 32-bit seq 40ab60bc84SDmitry Chagin * - 2 miscellaneous 32-bit values 41ab60bc84SDmitry Chagin */ 42ab60bc84SDmitry Chagin struct l_ipc64_perm 43ab60bc84SDmitry Chagin { 44ab60bc84SDmitry Chagin l_key_t key; 45ab60bc84SDmitry Chagin l_uid_t uid; 46ab60bc84SDmitry Chagin l_gid_t gid; 47ab60bc84SDmitry Chagin l_uid_t cuid; 48ab60bc84SDmitry Chagin l_gid_t cgid; 49ab60bc84SDmitry Chagin l_mode_t mode; 50ab60bc84SDmitry Chagin /* pad if mode_t is ushort: */ 51ab60bc84SDmitry Chagin unsigned char __pad1[sizeof(l_int) - sizeof(l_mode_t)]; 52ab60bc84SDmitry Chagin l_ushort seq; 53ab60bc84SDmitry Chagin l_ushort __pad2; 54ab60bc84SDmitry Chagin l_ulong __unused1; 55ab60bc84SDmitry Chagin l_ulong __unused2; 56ab60bc84SDmitry Chagin }; 57ab60bc84SDmitry Chagin 58ab60bc84SDmitry Chagin /* 59ab60bc84SDmitry Chagin * The generic msqid64_ds structure fro x86 architecture. 60ab60bc84SDmitry Chagin * Note extra padding because this structure is passed back and forth 61ab60bc84SDmitry Chagin * between kernel and user space. 62ab60bc84SDmitry Chagin * 63ab60bc84SDmitry Chagin * Pad space is left for: 64ab60bc84SDmitry Chagin * - 64-bit time_t to solve y2038 problem 65ab60bc84SDmitry Chagin * - 2 miscellaneous 32-bit values 66ab60bc84SDmitry Chagin */ 67ab60bc84SDmitry Chagin 68ab60bc84SDmitry Chagin struct l_msqid64_ds { 69ab60bc84SDmitry Chagin struct l_ipc64_perm msg_perm; 70ab60bc84SDmitry Chagin l_time_t msg_stime; /* last msgsnd time */ 71ab60bc84SDmitry Chagin #if !defined(__LP64__) || defined(COMPAT_LINUX32) 72ab60bc84SDmitry Chagin l_ulong __unused1; 73ab60bc84SDmitry Chagin #endif 74ab60bc84SDmitry Chagin l_time_t msg_rtime; /* last msgrcv time */ 75ab60bc84SDmitry Chagin #if !defined(__LP64__) || defined(COMPAT_LINUX32) 76ab60bc84SDmitry Chagin l_ulong __unused2; 77ab60bc84SDmitry Chagin #endif 78ab60bc84SDmitry Chagin l_time_t msg_ctime; /* last change time */ 79ab60bc84SDmitry Chagin #if !defined(__LP64__) || defined(COMPAT_LINUX32) 80ab60bc84SDmitry Chagin l_ulong __unused3; 81ab60bc84SDmitry Chagin #endif 82ab60bc84SDmitry Chagin l_ulong msg_cbytes; /* current number of bytes on queue */ 83ab60bc84SDmitry Chagin l_ulong msg_qnum; /* number of messages in queue */ 84ab60bc84SDmitry Chagin l_ulong msg_qbytes; /* max number of bytes on queue */ 85ab60bc84SDmitry Chagin l_pid_t msg_lspid; /* pid of last msgsnd */ 86ab60bc84SDmitry Chagin l_pid_t msg_lrpid; /* last receive pid */ 87ab60bc84SDmitry Chagin l_ulong __unused4; 88ab60bc84SDmitry Chagin l_ulong __unused5; 89ab60bc84SDmitry Chagin }; 90ab60bc84SDmitry Chagin 91ab60bc84SDmitry Chagin /* 92ab60bc84SDmitry Chagin * The generic semid64_ds structure for x86 architecture. 93ab60bc84SDmitry Chagin * Note extra padding because this structure is passed back and forth 94ab60bc84SDmitry Chagin * between kernel and user space. 95ab60bc84SDmitry Chagin * 96ab60bc84SDmitry Chagin * Pad space is left for: 97ab60bc84SDmitry Chagin * - 64-bit time_t to solve y2038 problem 98ab60bc84SDmitry Chagin * - 2 miscellaneous 32-bit values 99ab60bc84SDmitry Chagin */ 100ab60bc84SDmitry Chagin 101ab60bc84SDmitry Chagin struct l_semid64_ds { 102ab60bc84SDmitry Chagin struct l_ipc64_perm sem_perm; /* permissions */ 103ab60bc84SDmitry Chagin l_time_t sem_otime; /* last semop time */ 104*1ee29160SDmitry Chagin #if defined(__amd64__) || defined(__i386__) 105ab60bc84SDmitry Chagin l_ulong __unused1; 106*1ee29160SDmitry Chagin #endif 107ab60bc84SDmitry Chagin l_time_t sem_ctime; /* last change time */ 108*1ee29160SDmitry Chagin #if defined(__amd64__) || defined(__i386__) 109ab60bc84SDmitry Chagin l_ulong __unused2; 110*1ee29160SDmitry Chagin #endif 111ab60bc84SDmitry Chagin l_ulong sem_nsems; /* no. of semaphores in array */ 112ab60bc84SDmitry Chagin l_ulong __unused3; 113ab60bc84SDmitry Chagin l_ulong __unused4; 114ab60bc84SDmitry Chagin }; 115ab60bc84SDmitry Chagin 116ab60bc84SDmitry Chagin /* 117ab60bc84SDmitry Chagin * The generic shmid64_ds structure for x86 architecture. 118ab60bc84SDmitry Chagin * Note extra padding because this structure is passed back and forth 119ab60bc84SDmitry Chagin * between kernel and user space. 120ab60bc84SDmitry Chagin * 121ab60bc84SDmitry Chagin * Pad space is left for: 122ab60bc84SDmitry Chagin * - 64-bit time_t to solve y2038 problem 123ab60bc84SDmitry Chagin * - 2 miscellaneous 32-bit values 124ab60bc84SDmitry Chagin */ 125ab60bc84SDmitry Chagin 126ab60bc84SDmitry Chagin struct l_shmid64_ds { 127ab60bc84SDmitry Chagin struct l_ipc64_perm shm_perm; /* operation perms */ 128ab60bc84SDmitry Chagin l_size_t shm_segsz; /* size of segment (bytes) */ 129ab60bc84SDmitry Chagin l_time_t shm_atime; /* last attach time */ 130ab60bc84SDmitry Chagin #if !defined(__LP64__) || defined(COMPAT_LINUX32) 131ab60bc84SDmitry Chagin l_ulong __unused1; 132ab60bc84SDmitry Chagin #endif 133ab60bc84SDmitry Chagin l_time_t shm_dtime; /* last detach time */ 134ab60bc84SDmitry Chagin #if !defined(__LP64__) || defined(COMPAT_LINUX32) 135ab60bc84SDmitry Chagin l_ulong __unused2; 136ab60bc84SDmitry Chagin #endif 137ab60bc84SDmitry Chagin l_time_t shm_ctime; /* last change time */ 138ab60bc84SDmitry Chagin #if !defined(__LP64__) || defined(COMPAT_LINUX32) 139ab60bc84SDmitry Chagin l_ulong __unused3; 140ab60bc84SDmitry Chagin #endif 141ab60bc84SDmitry Chagin l_pid_t shm_cpid; /* pid of creator */ 142ab60bc84SDmitry Chagin l_pid_t shm_lpid; /* pid of last operator */ 143ab60bc84SDmitry Chagin l_ulong shm_nattch; /* no. of current attaches */ 144ab60bc84SDmitry Chagin l_ulong __unused4; 145ab60bc84SDmitry Chagin l_ulong __unused5; 146ab60bc84SDmitry Chagin }; 147ab60bc84SDmitry Chagin 148ab60bc84SDmitry Chagin struct l_shminfo64 { 149ab60bc84SDmitry Chagin l_ulong shmmax; 150ab60bc84SDmitry Chagin l_ulong shmmin; 151ab60bc84SDmitry Chagin l_ulong shmmni; 152ab60bc84SDmitry Chagin l_ulong shmseg; 153ab60bc84SDmitry Chagin l_ulong shmall; 154ab60bc84SDmitry Chagin l_ulong __unused1; 155ab60bc84SDmitry Chagin l_ulong __unused2; 156ab60bc84SDmitry Chagin l_ulong __unused3; 157ab60bc84SDmitry Chagin l_ulong __unused4; 158ab60bc84SDmitry Chagin }; 159ab60bc84SDmitry Chagin 160ab60bc84SDmitry Chagin #endif /* !LINUX_IPC64_H_ */ 161