xref: /freebsd/sys/sys/sem.h (revision 7b594d2a)
1c3aac50fSPeter Wemm /* $FreeBSD$ */
23d903220SDoug Rabson /*	$NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $	*/
33d903220SDoug Rabson 
43d903220SDoug Rabson /*
53d903220SDoug Rabson  * SVID compatible sem.h file
63d903220SDoug Rabson  *
73d903220SDoug Rabson  * Author:  Daniel Boulet
83d903220SDoug Rabson  */
93d903220SDoug Rabson 
103d903220SDoug Rabson #ifndef _SYS_SEM_H_
113d903220SDoug Rabson #define _SYS_SEM_H_
123d903220SDoug Rabson 
133d903220SDoug Rabson #include <sys/ipc.h>
143d903220SDoug Rabson 
15ab063af9SPeter Wemm struct sem;
163d903220SDoug Rabson 
173d903220SDoug Rabson struct semid_ds {
183d903220SDoug Rabson 	struct ipc_perm	sem_perm;	/* operation permission struct */
193d903220SDoug Rabson 	struct sem	*sem_base;	/* pointer to first semaphore in set */
20*7b594d2aSJens Schweikhardt 	unsigned short	sem_nsems;	/* number of sems in set */
213d903220SDoug Rabson 	time_t		sem_otime;	/* last operation time */
223d903220SDoug Rabson 	long		sem_pad1;	/* SVABI/386 says I need this here */
233d903220SDoug Rabson 	time_t		sem_ctime;	/* last change time */
243d903220SDoug Rabson     					/* Times measured in secs since */
253d903220SDoug Rabson     					/* 00:00:00 GMT, Jan. 1, 1970 */
263d903220SDoug Rabson 	long		sem_pad2;	/* SVABI/386 says I need this here */
273d903220SDoug Rabson 	long		sem_pad3[4];	/* SVABI/386 says I need this here */
283d903220SDoug Rabson };
293d903220SDoug Rabson 
303d903220SDoug Rabson /*
313d903220SDoug Rabson  * semop's sops parameter structure
323d903220SDoug Rabson  */
333d903220SDoug Rabson struct sembuf {
34*7b594d2aSJens Schweikhardt 	unsigned short	sem_num;	/* semaphore # */
353d903220SDoug Rabson 	short		sem_op;		/* semaphore operation */
363d903220SDoug Rabson 	short		sem_flg;	/* operation flags */
373d903220SDoug Rabson };
383d903220SDoug Rabson #define SEM_UNDO	010000
393d903220SDoug Rabson 
403d903220SDoug Rabson /*
413d903220SDoug Rabson  * semctl's arg parameter structure
423d903220SDoug Rabson  */
433d903220SDoug Rabson union semun {
443d903220SDoug Rabson 	int		val;		/* value for SETVAL */
453d903220SDoug Rabson 	struct		semid_ds *buf;	/* buffer for IPC_STAT & IPC_SET */
46*7b594d2aSJens Schweikhardt 	unsigned short	*array;		/* array for GETALL & SETALL */
473d903220SDoug Rabson };
483d903220SDoug Rabson 
493d903220SDoug Rabson /*
503d903220SDoug Rabson  * commands for semctl
513d903220SDoug Rabson  */
523d903220SDoug Rabson #define GETNCNT	3	/* Return the value of semncnt {READ} */
533d903220SDoug Rabson #define GETPID	4	/* Return the value of sempid {READ} */
543d903220SDoug Rabson #define GETVAL	5	/* Return the value of semval {READ} */
553d903220SDoug Rabson #define GETALL	6	/* Return semvals into arg.array {READ} */
563d903220SDoug Rabson #define GETZCNT	7	/* Return the value of semzcnt {READ} */
573d903220SDoug Rabson #define SETVAL	8	/* Set the value of semval to arg.val {ALTER} */
583d903220SDoug Rabson #define SETALL	9	/* Set semvals from arg.array {ALTER} */
59d528be2bSMichael Reifenberger #define SEM_STAT 10	/* Like IPC_STAT but treats semid as sema-index */
60d528be2bSMichael Reifenberger #define SEM_INFO 11	/* Like IPC_INFO but treats semid as sema-index */
613d903220SDoug Rabson 
62aed5ecb7SJoerg Wunsch /*
63aed5ecb7SJoerg Wunsch  * Permissions
64aed5ecb7SJoerg Wunsch  */
6591a701cdSMichael Reifenberger #define SEM_A		IPC_W	/* alter permission */
6691a701cdSMichael Reifenberger #define SEM_R		IPC_R	/* read permission */
67aed5ecb7SJoerg Wunsch 
68664a31e4SPeter Wemm #ifdef _KERNEL
693d903220SDoug Rabson 
703d903220SDoug Rabson /*
713d903220SDoug Rabson  * semaphore info struct
723d903220SDoug Rabson  */
733d903220SDoug Rabson struct seminfo {
743d903220SDoug Rabson 	int	semmap,		/* # of entries in semaphore map */
753d903220SDoug Rabson 		semmni,		/* # of semaphore identifiers */
763d903220SDoug Rabson 		semmns,		/* # of semaphores in system */
773d903220SDoug Rabson 		semmnu,		/* # of undo structures in system */
783d903220SDoug Rabson 		semmsl,		/* max # of semaphores per id */
793d903220SDoug Rabson 		semopm,		/* max # of operations per semop call */
803d903220SDoug Rabson 		semume,		/* max # of undo entries per process */
813d903220SDoug Rabson 		semusz,		/* size in bytes of undo structure */
823d903220SDoug Rabson 		semvmx,		/* semaphore maximum value */
833d903220SDoug Rabson 		semaem;		/* adjust on exit max value */
843d903220SDoug Rabson };
85789668e2SDavid Greenman extern struct seminfo	seminfo;
863d903220SDoug Rabson 
873d903220SDoug Rabson /* internal "mode" bits */
883d903220SDoug Rabson #define	SEM_ALLOC	01000	/* semaphore is allocated */
893d903220SDoug Rabson #define	SEM_DEST	02000	/* semaphore will be destroyed on last detach */
903d903220SDoug Rabson 
913d903220SDoug Rabson /*
92a353d785SJoerg Wunsch  * Process sem_undo vectors at proc exit.
93a353d785SJoerg Wunsch  */
94789f12feSAlfred Perlstein void	semexit(struct proc *p);
95664a31e4SPeter Wemm #endif /* _KERNEL */
963d903220SDoug Rabson 
97664a31e4SPeter Wemm #ifndef _KERNEL
983d903220SDoug Rabson #include <sys/cdefs.h>
993beb3270SAlfred Perlstein #include <sys/_types.h>
1003beb3270SAlfred Perlstein 
1013beb3270SAlfred Perlstein #ifndef _SIZE_T_DECLARED
1023beb3270SAlfred Perlstein typedef __size_t        size_t;
1033beb3270SAlfred Perlstein #define _SIZE_T_DECLARED
1043beb3270SAlfred Perlstein #endif
1053beb3270SAlfred Perlstein 
1063beb3270SAlfred Perlstein #ifndef _PID_T_DECLARED
1073beb3270SAlfred Perlstein typedef __pid_t         pid_t;
1083beb3270SAlfred Perlstein #define _PID_T_DECLARED
1093beb3270SAlfred Perlstein #endif
1103d903220SDoug Rabson 
1113d903220SDoug Rabson __BEGIN_DECLS
112789f12feSAlfred Perlstein int semsys(int, ...);
113789f12feSAlfred Perlstein int semctl(int, int, int, ...);
114789f12feSAlfred Perlstein int semget(key_t, int, int);
1153beb3270SAlfred Perlstein int semop(int, struct sembuf *, size_t);
1163d903220SDoug Rabson __END_DECLS
117664a31e4SPeter Wemm #endif /* !_KERNEL */
1183d903220SDoug Rabson 
119*7b594d2aSJens Schweikhardt #endif /* !_SYS_SEM_H_ */
120