]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/compat/posix/v2_0/include/semaphore.h
Initial revision
[karo-tx-redboot.git] / packages / compat / posix / v2_0 / include / semaphore.h
1 #ifndef CYGONCE_SEMAPHORE_H
2 #define CYGONCE_SEMAPHORE_H
3 //=============================================================================
4 //
5 //      semaphore.h
6 //
7 //      POSIX semaphore header
8 //
9 //=============================================================================
10 //####ECOSGPLCOPYRIGHTBEGIN####
11 // -------------------------------------------
12 // This file is part of eCos, the Embedded Configurable Operating System.
13 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
14 //
15 // eCos is free software; you can redistribute it and/or modify it under
16 // the terms of the GNU General Public License as published by the Free
17 // Software Foundation; either version 2 or (at your option) any later version.
18 //
19 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
20 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
21 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
22 // for more details.
23 //
24 // You should have received a copy of the GNU General Public License along
25 // with eCos; if not, write to the Free Software Foundation, Inc.,
26 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
27 //
28 // As a special exception, if other files instantiate templates or use macros
29 // or inline functions from this file, or you compile this file and link it
30 // with other works to produce a work based on this file, this file does not
31 // by itself cause the resulting work to be covered by the GNU General Public
32 // License. However the source code for this file must still be made available
33 // in accordance with section (3) of the GNU General Public License.
34 //
35 // This exception does not invalidate any other reasons why a work based on
36 // this file might be covered by the GNU General Public License.
37 //
38 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
39 // at http://sources.redhat.com/ecos/ecos-license/
40 // -------------------------------------------
41 //####ECOSGPLCOPYRIGHTEND####
42 //=============================================================================
43 //#####DESCRIPTIONBEGIN####
44 //
45 // Author(s):     nickg
46 // Contributors:  nickg
47 // Date:          2000-03-17
48 // Purpose:       POSIX semaphore header
49 // Description:   This header contains all the definitions needed to support
50 //                semaphores under eCos. The reader is referred to the POSIX
51 //                standard or equivalent documentation for details of the
52 //                functionality contained herein.
53 //              
54 // Usage:
55 //              #include <semaphore.h>
56 //              ...
57 //              
58 //
59 //####DESCRIPTIONEND####
60 //
61 //=============================================================================
62
63 #include <pkgconf/hal.h>
64 #include <pkgconf/kernel.h>
65 #include <pkgconf/posix.h>
66
67 #include <stddef.h>             // NULL, size_t
68
69 #include <limits.h>
70
71 #include <sys/types.h>
72
73 //-----------------------------------------------------------------------------
74 // Semaphore object definition
75
76 // This structure must exactly correspond in size and layout to the underlying
77 // eCos C++ class that implements this object.
78
79 typedef struct
80 {
81   CYG_WORD32    sem_value;
82   CYG_ADDRESS   sem_queue;
83 } sem_t;
84
85 //-----------------------------------------------------------------------------
86 // Semaphore functions
87
88 // Initialize semaphore to value.
89 // pshared is not supported under eCos.
90 externC int sem_init  (sem_t *sem, int pshared, unsigned int value);
91
92 // Destroy the semaphore.
93 externC int sem_destroy  (sem_t *sem);
94
95 // Decrement value if >0 or wait for a post.
96 externC int sem_wait  (sem_t *sem);
97
98 // Decrement value if >0, return -1 if not.
99 externC int sem_trywait  (sem_t *sem);
100
101 // Increment value and wake a waiter if one is present.
102 externC int sem_post  (sem_t *sem);
103
104 // Get current value
105 externC int sem_getvalue  (sem_t *sem, int *sval);
106
107 //-----------------------------------------------------------------------------
108 // Named semaphore functions
109 // These are an optional feature under eCos
110
111 // Open an existing named semaphore, or create it.
112 externC sem_t *sem_open  (const char *name, int oflag, ...);
113
114 // Close descriptor for semaphore.
115 externC int sem_close  (sem_t *sem);
116
117 // Remove named semaphore
118 externC int sem_unlink  (const char *name);
119
120 //-----------------------------------------------------------------------------
121 // Special return value for sem_open()
122
123 #define SEM_FAILED      ((sem_t *)NULL)
124
125 //-----------------------------------------------------------------------------
126 #endif // ifndef CYGONCE_SEMAPHORE_H
127 // End of semaphore.h