gdb - Local mods (compile)
[dragonfly.git] / sys / sys / sem.h
1 /* $FreeBSD: src/sys/sys/sem.h,v 1.20.2.2 2000/08/04 22:31:10 peter Exp $ */
2 /*      $NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $      */
3
4 /*
5  * SVID compatible sem.h file
6  *
7  * Author:  Daniel Boulet
8  */
9
10 #ifndef _SYS_SEM_H_
11 #define _SYS_SEM_H_
12
13 #include <sys/ipc.h>
14
15 struct sem;
16
17 struct semid_ds {
18         struct  ipc_perm sem_perm;      /* operation permission struct */
19         struct  sem *sem_base;  /* pointer to first semaphore in set */
20         u_short sem_nsems;      /* number of sems in set */
21         time_t  sem_otime;      /* last operation time */
22         long    sem_pad1;       /* SVABI/386 says I need this here */
23         time_t  sem_ctime;      /* last change time */
24                                 /* Times measured in secs since */
25                                 /* 00:00:00 GMT, Jan. 1, 1970 */
26         long    sem_pad2;       /* SVABI/386 says I need this here */
27         long    sem_pad3[4];    /* SVABI/386 says I need this here */
28 };
29
30 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
31
32 #include <sys/lock.h>
33
34 struct semid_pool {
35         struct lock lk;
36         struct semid_ds ds;
37         long gen;
38 };
39
40 #endif
41
42 /*
43  * semop's sops parameter structure
44  */
45 struct sembuf {
46         u_short sem_num;        /* semaphore # */
47         short   sem_op;         /* semaphore operation */
48         short   sem_flg;        /* operation flags */
49 };
50 #define SEM_UNDO        010000
51
52 #define MAX_SOPS        5       /* maximum # of sembuf's per semop call */
53
54 /*
55  * semctl's arg parameter structure
56  */
57 union semun {
58         int     val;            /* value for SETVAL */
59         struct  semid_ds *buf;  /* buffer for IPC_STAT & IPC_SET */
60         u_short *array;         /* array for GETALL & SETALL */
61 };
62
63 /*
64  * commands for semctl
65  */
66 #define GETNCNT 3       /* Return the value of semncnt {READ} */
67 #define GETPID  4       /* Return the value of sempid {READ} */
68 #define GETVAL  5       /* Return the value of semval {READ} */
69 #define GETALL  6       /* Return semvals into arg.array {READ} */
70 #define GETZCNT 7       /* Return the value of semzcnt {READ} */
71 #define SETVAL  8       /* Set the value of semval to arg.val {ALTER} */
72 #define SETALL  9       /* Set semvals from arg.array {ALTER} */
73 #define SEM_STAT 10     /* Like IPC_STAT but treats semid as sema-index */
74
75 /*
76  * Permissions
77  */
78 #define SEM_A           0200    /* alter permission */
79 #define SEM_R           0400    /* read permission */
80
81 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
82
83 /*
84  * semaphore info struct
85  */
86 struct seminfo {
87         int     semmap,         /* # of entries in semaphore map */
88                 semmni,         /* # of semaphore identifiers */
89                 semmns,         /* # of semaphores in system */
90                 semmnu,         /* # of undo structures in system */
91                 semmsl,         /* max # of semaphores per id */
92                 semopm,         /* max # of operations per semop call */
93                 semume,         /* max # of undo entries per process */
94                 semusz,         /* size in bytes of undo structure */
95                 semvmx,         /* semaphore maximum value */
96                 semaem;         /* adjust on exit max value */
97 };
98
99 /* internal "mode" bits */
100 #define SEM_ALLOC       01000   /* semaphore is allocated */
101 #define SEM_DEST        02000   /* semaphore will be destroyed on last detach */
102
103 #endif /* _KERNEL || _KERNEL_STRUCTURES */
104
105 #ifdef _KERNEL
106
107 /*
108  * Process sem_undo vectors at proc exit.
109  */
110 void    semexit (struct proc *p);
111 extern struct seminfo   seminfo;
112
113 #endif
114
115 #ifndef _KERNEL
116 #include <sys/cdefs.h>
117
118 __BEGIN_DECLS
119 int semctl (int, int, int, ...);
120 int semget (key_t, int, int);
121 int semop (int, struct sembuf *,unsigned);
122 __END_DECLS
123 #endif /* !_KERNEL */
124
125 #endif /* !_SEM_H_ */