epoc32/include/stdapis/sys/sem.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
child 4 837f303aceeb
equal deleted inserted replaced
1:666f914201fb 2:2fe1408b6811
     1 sem.h
     1 /* $FreeBSD: src/sys/sys/sem.h,v 1.29 2004/11/17 13:12:06 rwatson Exp $ */
       
     2 /*	$NetBSD: sem.h,v 1.5 1994/06/29 06:45:15 cgd Exp $	*/
       
     3 
       
     4 /*
       
     5  *© Portions copyright (c) 2006 Nokia Corporation.  All rights reserved.
       
     6  *© Portions copyright (c) 2006 Symbian Software Ltd. All rights reserved.
       
     7  * SVID compatible sem.h file
       
     8  *
       
     9  * Author:  Daniel Boulet
       
    10  */
       
    11 
       
    12 #ifndef _SYS_SEM_H_
       
    13 #define _SYS_SEM_H_
       
    14 
       
    15 #include <sys/ipc.h>
       
    16 
       
    17 
       
    18 struct sem {
       
    19 	u_short	semval;		/* semaphore value */
       
    20 	pid_t	sempid;		/* process ID of last operation */
       
    21 	u_short	semncnt;	/* number of processes waiting for semval
       
    22                            to become greater than current value */
       
    23 	u_short	semzcnt;	/* number of processes waiting for semval
       
    24                            to become 0 */
       
    25     };
       
    26 
       
    27 struct semid_ds {
       
    28 	struct ipc_perm	sem_perm;	/* operation permission struct */
       
    29 	struct sem	*sem_base;	/* pointer to first semaphore in set */
       
    30 	unsigned short	sem_nsems;	/* number of sems in set */
       
    31 	time_t		sem_otime;	/* last operation time */
       
    32 	long		sem_pad1;	/* SVABI/386 says I need this here */
       
    33 	time_t		sem_ctime;	/* last change time */
       
    34     					/* Times measured in secs since */
       
    35     					/* 00:00:00 GMT, Jan. 1, 1970 */
       
    36 	long		sem_pad2;	/* SVABI/386 says I need this here */
       
    37 	long		sem_pad3[4];	/* SVABI/386 says I need this here */
       
    38 };
       
    39 
       
    40 /*
       
    41  * semop's sops parameter structure
       
    42  */
       
    43 struct sembuf {
       
    44 	unsigned short	sem_num;	/* semaphore # */
       
    45 	short		sem_op;		/* semaphore operation */
       
    46 	short		sem_flg;	/* operation flags */
       
    47 };
       
    48 #define SEM_UNDO	010000
       
    49 
       
    50 /*
       
    51  * semctl's arg parameter structure
       
    52  */
       
    53 union semun {
       
    54 	int		val;		/* value for SETVAL */
       
    55 	struct		semid_ds *buf;	/* buffer for IPC_STAT & IPC_SET */
       
    56 	unsigned short	*array;		/* array for GETALL & SETALL */
       
    57 };
       
    58 
       
    59 /*
       
    60  * commands for semctl
       
    61  */
       
    62 #define GETNCNT	3	/* Return the value of semncnt {READ} */
       
    63 #define GETPID	4	/* Return the value of sempid {READ} */
       
    64 #define GETVAL	5	/* Return the value of semval {READ} */
       
    65 #define GETALL	6	/* Return semvals into arg.array {READ} */
       
    66 #define GETZCNT	7	/* Return the value of semzcnt {READ} */
       
    67 #define SETVAL	8	/* Set the value of semval to arg.val {ALTER} */
       
    68 #define SETALL	9	/* Set semvals from arg.array {ALTER} */
       
    69 #define SEM_STAT 10	/* Like IPC_STAT but treats semid as sema-index */
       
    70 #define SEM_INFO 11	/* Like IPC_INFO but treats semid as sema-index */
       
    71 
       
    72 /*
       
    73  * Permissions
       
    74  */
       
    75 #define SEM_A		IPC_W	/* alter permission */
       
    76 #define SEM_R		IPC_R	/* read permission */
       
    77 
       
    78 #ifdef _KERNEL
       
    79 
       
    80 /*
       
    81  * semaphore info struct
       
    82  */
       
    83 struct seminfo {
       
    84 	int	semmap,		/* # of entries in semaphore map */
       
    85 		semmni,		/* # of semaphore identifiers */
       
    86 		semmns,		/* # of semaphores in system */
       
    87 		semmnu,		/* # of undo structures in system */
       
    88 		semmsl,		/* max # of semaphores per id */
       
    89 		semopm,		/* max # of operations per semop call */
       
    90 		semume,		/* max # of undo entries per process */
       
    91 		semusz,		/* size in bytes of undo structure */
       
    92 		semvmx,		/* semaphore maximum value */
       
    93 		semaem;		/* adjust on exit max value */
       
    94 };
       
    95 extern struct seminfo	seminfo;
       
    96 
       
    97 /*
       
    98  * Kernel wrapper for the user-level structure
       
    99  */
       
   100 struct semid_kernel {
       
   101 	struct	semid_ds u;
       
   102 	struct	label *label;	/* MAC framework label */
       
   103 };
       
   104 
       
   105 /* internal "mode" bits */
       
   106 #define	SEM_ALLOC	01000	/* semaphore is allocated */
       
   107 #define	SEM_DEST	02000	/* semaphore will be destroyed on last detach */
       
   108 
       
   109 /*
       
   110  * Process sem_undo vectors at proc exit.
       
   111  */
       
   112 void	semexit(struct proc *p);
       
   113 #endif /* _KERNEL */
       
   114 
       
   115 #ifndef _KERNEL
       
   116 #include <sys/cdefs.h>
       
   117 #include <sys/_types.h>
       
   118 
       
   119 #ifndef _SIZE_T_DECLARED
       
   120 typedef __size_t        size_t;
       
   121 #define _SIZE_T_DECLARED
       
   122 #endif
       
   123 
       
   124 #ifndef _PID_T_DECLARED
       
   125 typedef __pid_t         pid_t;
       
   126 #define _PID_T_DECLARED
       
   127 #endif
       
   128 
       
   129 // FUNCTION PROTOTYPES
       
   130 
       
   131 
       
   132 // FORWARD DECLARATIONS
       
   133 
       
   134 
       
   135 // CLASS/STRUCT/FUNCTION DECLARATION
       
   136 
       
   137 __BEGIN_DECLS
       
   138 
       
   139 /*
       
   140 * Get semaphore identifier using the IPC key generated by ftok.
       
   141 */
       
   142 
       
   143 IMPORT_C int semget(key_t key, int nsems, int semflg);
       
   144 
       
   145 
       
   146 /*
       
   147 * Perform atomically a user-defined array of semaphore operations on the set of 
       
   148 * semaphores associated with the semaphore identifier specified by the argument semid.
       
   149 */
       
   150 
       
   151 IMPORT_C int semop(int semid, struct sembuf *sops, unsigned nsops);
       
   152 
       
   153 
       
   154 /*
       
   155 * Provides a variety of semaphore control operations as specified by cmd.
       
   156 */
       
   157 IMPORT_C int semctl(int semid, int semnum, int cmd, ...);
       
   158 
       
   159 
       
   160 __END_DECLS
       
   161 #endif // #ifndef _KERNEL
       
   162 
       
   163 #endif // _SYS_SEM_H_
       
   164 
       
   165 //  End of File