1 #ifndef CYGONCE_SEMAPHORE_H
2 #define CYGONCE_SEMAPHORE_H
3 //=============================================================================
7 // POSIX semaphore header
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.
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.
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
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.
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.
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.
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####
46 // Contributors: nickg
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.
55 // #include <semaphore.h>
59 //####DESCRIPTIONEND####
61 //=============================================================================
63 #include <pkgconf/hal.h>
64 #include <pkgconf/kernel.h>
65 #include <pkgconf/posix.h>
67 #include <stddef.h> // NULL, size_t
71 #include <sys/types.h>
73 //-----------------------------------------------------------------------------
74 // Semaphore object definition
76 // This structure must exactly correspond in size and layout to the underlying
77 // eCos C++ class that implements this object.
82 CYG_ADDRESS sem_queue;
85 //-----------------------------------------------------------------------------
86 // Semaphore functions
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);
92 // Destroy the semaphore.
93 externC int sem_destroy (sem_t *sem);
95 // Decrement value if >0 or wait for a post.
96 externC int sem_wait (sem_t *sem);
98 // Decrement value if >0, return -1 if not.
99 externC int sem_trywait (sem_t *sem);
101 // Increment value and wake a waiter if one is present.
102 externC int sem_post (sem_t *sem);
105 externC int sem_getvalue (sem_t *sem, int *sval);
107 //-----------------------------------------------------------------------------
108 // Named semaphore functions
109 // These are an optional feature under eCos
111 // Open an existing named semaphore, or create it.
112 externC sem_t *sem_open (const char *name, int oflag, ...);
114 // Close descriptor for semaphore.
115 externC int sem_close (sem_t *sem);
117 // Remove named semaphore
118 externC int sem_unlink (const char *name);
120 //-----------------------------------------------------------------------------
121 // Special return value for sem_open()
123 #define SEM_FAILED ((sem_t *)NULL)
125 //-----------------------------------------------------------------------------
126 #endif // ifndef CYGONCE_SEMAPHORE_H
127 // End of semaphore.h