annotate packages/kernel/current/src/common/kapi.cxx @ 1031:6b4a1f23fbbb

* src/common/kapi.cxx (cyg_thread_get_next): Passing a *current pointer as NULL is how you start the walk of the linked list. So don't assert on NULL. Reported by Daniel Lidsten.
author asl
date Tue, 20 May 2003 08:56:42 +0000
parents bd1ddaaaf796
children 1b465c781382
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 //==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
3 // common/kapi.cxx
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
5 // C API Implementation
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 //==========================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
9 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
460
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
12 // Copyright (C) 2002 Nick Garnett
546
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
13 // Copyright (C) 2003 Jonathan Larmour
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
14 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
15 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
16 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
17 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
18 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
19 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
20 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
21 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
22 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
23 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
24 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
25 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
26 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
27 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
28 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
29 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
30 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
31 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
32 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
33 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
34 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
35 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
36 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
37 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
38 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
39 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
40 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
41 //####ECOSGPLCOPYRIGHTEND####
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 //==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
45 // Author(s): nickg, dsm
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
46 // Contributors: nickg
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
47 // Date: 1998-03-02
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
48 // Purpose: C API Implementation
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
49 // Description: C++ implementation of the C API
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 //==========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 #include <pkgconf/kernel.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 #ifdef CYGFUN_KERNEL_API_C
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 #include <cyg/kernel/ktypes.h> // base kernel types
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 #include <cyg/infra/cyg_trac.h> // tracing macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 #include <cyg/infra/cyg_ass.h> // assertion macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 #include <cyg/kernel/instrmnt.h> // instrumentation
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 #include <cyg/kernel/diag.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 #include <cyg/kernel/thread.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 #include <cyg/kernel/thread.inl> // thread inlines
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 #include <cyg/kernel/sched.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 #include <cyg/kernel/intr.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 #include <cyg/kernel/clock.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 #include <cyg/kernel/sema.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 #include <cyg/kernel/flag.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 #include <cyg/kernel/mutex.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 #include <cyg/kernel/mbox.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 #include <cyg/kernel/sched.inl> // scheduler inlines
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 #include <cyg/kernel/clock.inl> // clock inlines
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 #include <cyg/kernel/kapi.h> // C API
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 // Magic new function
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 inline void *operator new(size_t size, void *ptr)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 CYG_CHECK_DATA_PTR( ptr, "Bad pointer" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 return ptr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 #ifdef CYGDBG_USE_ASSERTS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 #define CYG_ASSERT_SIZES(cstruct, cxxstruct) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 CYG_MACRO_START \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 char *msg = "Size of C struct " #cstruct \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 " != size of C++ struct " #cxxstruct ; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 CYG_ASSERT( sizeof(cstruct) == sizeof(cxxstruct) , msg ); \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 #define CYG_ASSERT_SIZES(cstruct, cxxstruct)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 /* Scheduler operations */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111 /* Starts scheduler with created threads. Never returns. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 externC void cyg_scheduler_start(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 Cyg_Scheduler::start();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
117 /* Lock the scheduler. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 externC void cyg_scheduler_lock(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 Cyg_Scheduler::lock();
56
755351606154 Merge from eCos master repository on 1999-12-01-18:03:05-GMT
jlarmour
parents: 38
diff changeset
121 // get_sched_lock() is unsigned, see below "cyg_ucount32 lock"
755351606154 Merge from eCos master repository on 1999-12-01-18:03:05-GMT
jlarmour
parents: 38
diff changeset
122 CYG_ASSERT( (0xff000000 & (Cyg_Scheduler::get_sched_lock())) == 0,
755351606154 Merge from eCos master repository on 1999-12-01-18:03:05-GMT
jlarmour
parents: 38
diff changeset
123 "Scheduler overlocked" );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125
84
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
126 /* Lock the scheduler, but never more than level=1. */
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
127 externC void cyg_scheduler_safe_lock(void)
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
128 {
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
129 Cyg_Scheduler::lock();
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
130 cyg_ucount32 slock = Cyg_Scheduler::get_sched_lock();
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
131 if (slock > 1)
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
132 Cyg_Scheduler::unlock();
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
133 // get_sched_lock() is unsigned, see below "cyg_ucount32 lock"
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
134 CYG_ASSERT( (0xff000000 & (Cyg_Scheduler::get_sched_lock())) == 0,
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
135 "Scheduler overlocked" );
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
136 }
489eb5632bc3 Merge from eCos master repository on 2000-04-28-18:44:39-BST
jlarmour
parents: 66
diff changeset
137
4
1d7f19c9e4d1 Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents: 2
diff changeset
138 /* Unlock the scheduler. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 externC void cyg_scheduler_unlock(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 {
56
755351606154 Merge from eCos master repository on 1999-12-01-18:03:05-GMT
jlarmour
parents: 38
diff changeset
141 cyg_ucount32 slock = Cyg_Scheduler::get_sched_lock();
755351606154 Merge from eCos master repository on 1999-12-01-18:03:05-GMT
jlarmour
parents: 38
diff changeset
142 CYG_ASSERT( 0 < slock, "Scheduler not locked" );
755351606154 Merge from eCos master repository on 1999-12-01-18:03:05-GMT
jlarmour
parents: 38
diff changeset
143 // And program defensively too:
755351606154 Merge from eCos master repository on 1999-12-01-18:03:05-GMT
jlarmour
parents: 38
diff changeset
144 if ( 0 < slock )
755351606154 Merge from eCos master repository on 1999-12-01-18:03:05-GMT
jlarmour
parents: 38
diff changeset
145 Cyg_Scheduler::unlock();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147
105
5a0cc6c243a9 Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents: 84
diff changeset
148 /* Read the scheduler lock value. */
5a0cc6c243a9 Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents: 84
diff changeset
149 externC cyg_ucount32 cyg_scheduler_read_lock(void)
5a0cc6c243a9 Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents: 84
diff changeset
150 {
5a0cc6c243a9 Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents: 84
diff changeset
151 cyg_ucount32 slock = Cyg_Scheduler::get_sched_lock();
5a0cc6c243a9 Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents: 84
diff changeset
152 return slock;
5a0cc6c243a9 Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents: 84
diff changeset
153 }
5a0cc6c243a9 Merge from eCos master repository on 2000-06-30-08:18:49-BST
jlarmour
parents: 84
diff changeset
154
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 /* Thread operations */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 externC void cyg_thread_create(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
159 cyg_addrword_t sched_info, /* scheduling info (eg pri) */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 cyg_thread_entry_t *entry, /* entry point function */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
161 cyg_addrword_t entry_data, /* entry data */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 char *name, /* optional thread name */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 void *stack_base, /* stack base, NULL = alloc */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 cyg_ucount32 stack_size, /* stack size, 0 = default */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 cyg_handle_t *handle, /* returned thread handle */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 cyg_thread *thread /* put thread here */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 CYG_ASSERT_SIZES( cyg_thread, Cyg_Thread );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 Cyg_Thread *t = new((void *)thread) Cyg_Thread (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 (CYG_ADDRWORD) sched_info,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 (cyg_thread_entry *)entry,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 (CYG_ADDRWORD) entry_data,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 name,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
176 (CYG_ADDRWORD) stack_base,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
177 stack_size
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 *handle = (cyg_handle_t)thread;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 externC void cyg_thread_exit()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 Cyg_Thread::exit();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
190 externC cyg_bool_t cyg_thread_delete( cyg_handle_t thread )
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
191 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
192 Cyg_Thread *th = (Cyg_Thread *)thread;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
193 if( th->get_state() != Cyg_Thread::EXITED )
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
194 th->kill(); // encourage it to terminate
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
195 if( th->get_state() != Cyg_Thread::EXITED )
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
196 return false; // it didn't run yet, leave it up to the app to fix
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
197 th->~Cyg_Thread();
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
198 return true;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
199 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
200
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 externC void cyg_thread_suspend(cyg_handle_t thread)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 ((Cyg_Thread *)thread)->suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 externC void cyg_thread_resume(cyg_handle_t thread)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 Cyg_Thread *th = (Cyg_Thread *)thread;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 // If we are resuming an exited thread then
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 // reinitialize it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 if( th->get_state() == Cyg_Thread::EXITED )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 th->reinitialize();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 th->resume();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 externC void cyg_thread_kill( cyg_handle_t thread)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 {
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
221 ((Cyg_Thread *)thread)->kill();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
224 externC void cyg_thread_release( cyg_handle_t thread)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
225 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
226 ((Cyg_Thread *)thread)->release();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
227 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
228
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 externC void cyg_thread_yield()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231 Cyg_Thread::yield();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234 externC cyg_handle_t cyg_thread_self()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 return (cyg_handle_t)Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
239 // idle thread is not really a plain CygThread; danger.
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
240 externC cyg_handle_t cyg_thread_idle_thread()
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
241 {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
242 extern Cyg_Thread idle_thread;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
243 return (cyg_handle_t)&idle_thread;
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
244 }
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
245
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
246 /* Priority manipulation */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 externC void cyg_thread_set_priority(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 cyg_handle_t thread, cyg_priority_t priority )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249 {
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
250 #ifdef CYGIMP_THREAD_PRIORITY
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251 ((Cyg_Thread *)thread)->set_priority(priority);
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
252 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254
179
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
255
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
256 /* Get the normal priority, ie without any applied mutex inheritance or
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
257 * ceiling protocol. */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
258 externC cyg_priority_t cyg_thread_get_priority(cyg_handle_t thread)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
259 {
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
260 #ifdef CYGIMP_THREAD_PRIORITY
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
261 return ((Cyg_Thread *)thread)->get_priority();
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
262 #else
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
263 return 0;
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 4
diff changeset
264 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266
179
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
267
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
268 /* Get the current priority, ie any applied mutex inheritance or
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
269 * ceiling protocol. */
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
270 externC cyg_priority_t cyg_thread_get_current_priority(cyg_handle_t thread)
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
271 {
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
272 #ifdef CYGIMP_THREAD_PRIORITY
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
273 return ((Cyg_Thread *)thread)->get_current_priority();
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
274 #else
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
275 return 0;
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
276 #endif
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
277 }
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
278
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 /* Deadline scheduling control (optional) */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
280
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
281 externC void cyg_thread_deadline_wait(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
282 cyg_tick_count_t start_time, /* abs earliest start time */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
283 cyg_tick_count_t run_time, /* worst case execution time */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
284 cyg_tick_count_t deadline /* absolute deadline */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
285 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
286 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
287 CYG_ASSERT(0,"Not implemented");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
288 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
289
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
290 externC void cyg_thread_delay(cyg_tick_count_t delay)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
291 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
292 Cyg_Thread::self()->delay(delay);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
293 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
294
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
295 /* Stack information */
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
296 externC cyg_addrword_t cyg_thread_get_stack_base(cyg_handle_t thread)
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
297 {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
298 return ((Cyg_Thread *)thread)->get_stack_base();
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
299 }
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
300
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
301 externC cyg_uint32 cyg_thread_get_stack_size(cyg_handle_t thread)
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
302 {
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
303 return ((Cyg_Thread *)thread)->get_stack_size();
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
304 }
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
305
147
d397fc472bcf Merge from eCos master repository on 2001-01-05-06:43:02-GMT
jlarmour
parents: 115
diff changeset
306 #ifdef CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT
d397fc472bcf Merge from eCos master repository on 2001-01-05-06:43:02-GMT
jlarmour
parents: 115
diff changeset
307 externC cyg_uint32 cyg_thread_measure_stack_usage(cyg_handle_t thread)
d397fc472bcf Merge from eCos master repository on 2001-01-05-06:43:02-GMT
jlarmour
parents: 115
diff changeset
308 {
d397fc472bcf Merge from eCos master repository on 2001-01-05-06:43:02-GMT
jlarmour
parents: 115
diff changeset
309 return ((Cyg_Thread *)thread)->measure_stack_usage();
d397fc472bcf Merge from eCos master repository on 2001-01-05-06:43:02-GMT
jlarmour
parents: 115
diff changeset
310 }
d397fc472bcf Merge from eCos master repository on 2001-01-05-06:43:02-GMT
jlarmour
parents: 115
diff changeset
311 #endif
10
d3fbcdfa1b2f Merge from eCos master repository on 1999-05-29-00:13:11-BST
jlarmour
parents: 8
diff changeset
312
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
313 /*---------------------------------------------------------------------------*/
460
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
314 /* Thread enumeration and information */
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
315
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
316 #ifdef CYGVAR_KERNEL_THREADS_LIST
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
317
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
318 cyg_bool_t cyg_thread_get_next( cyg_handle_t *current, cyg_uint16 *id )
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
319 {
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
320 cyg_bool_t result = true;
546
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
321
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
322 // There is a minute but finite chance that the thread could have
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
323 // exitted since the previous cyg_thread_get_next() call, and we can't
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
324 // detect the ID mismatch further down. So be quite zealous with checking.
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
325
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
326 CYG_CHECK_DATA_PTRC( current );
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
327 CYG_CHECK_DATA_PTRC( id );
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
328 if ( *current != 0 )
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
329 CYG_CHECK_DATA_PTRC( *current );
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
330
460
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
331 Cyg_Scheduler::lock();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
332
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
333 Cyg_Thread *thread = (Cyg_Thread *)*current;
1031
6b4a1f23fbbb * src/common/kapi.cxx (cyg_thread_get_next): Passing a *current
asl
parents: 546
diff changeset
334 CYG_ASSERT_ZERO_OR_CLASSC( thread );
460
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
335 if( *current == 0 )
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
336 {
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
337 thread = Cyg_Thread::get_list_head();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
338 *current = (cyg_handle_t)thread;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
339 *id = thread->get_unique_id();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
340 }
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
341 else if( (thread->get_unique_id() == *id) &&
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
342 (thread = thread->get_list_next()) != NULL )
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
343 {
546
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
344 CYG_CHECK_DATA_PTRC( thread );
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
345 CYG_ASSERT_CLASSC( thread );
460
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
346 *current = (cyg_handle_t)thread;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
347 *id = thread->get_unique_id();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
348 }
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
349 else
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
350 {
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
351 *current = 0;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
352 *id = 0;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
353 result = false;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
354 }
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
355
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
356 Cyg_Scheduler::unlock();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
357
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
358 return result;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
359 }
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
360
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
361 cyg_handle_t cyg_thread_find( cyg_uint16 id )
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
362 {
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
363 Cyg_Scheduler::lock();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
364
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
365 Cyg_Thread *thread = Cyg_Thread::get_list_head();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
366
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
367 while( thread != NULL )
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
368 {
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
369 if( thread->get_unique_id() == id )
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
370 break;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
371
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
372 thread = thread->get_list_next();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
373 }
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
374
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
375 Cyg_Scheduler::unlock();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
376
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
377 return (cyg_handle_t)thread;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
378 }
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
379
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
380 #endif
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
381
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
382 cyg_bool_t cyg_thread_get_info( cyg_handle_t threadh,
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
383 cyg_uint16 id,
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
384 cyg_thread_info *info )
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
385 {
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
386 cyg_bool_t result = true;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
387 Cyg_Thread *thread = (Cyg_Thread *)threadh;
546
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
388 CYG_CHECK_DATA_PTRC( thread );
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
389 if ( NULL != info )
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
390 CYG_CHECK_DATA_PTRC( info );
460
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
391
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
392 Cyg_Scheduler::lock();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
393
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
394 if( thread->get_unique_id() == id && info != NULL )
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
395 {
546
bd1ddaaaf796 * src/common/kapi.cxx (cyg_thread_get_next): Be quite zealous about
jlarmour
parents: 460
diff changeset
396 CYG_ASSERT_CLASSC( thread );
460
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
397 info->handle = threadh;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
398 info->id = id;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
399 info->state = thread->get_state();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
400 #ifdef CYGVAR_KERNEL_THREADS_NAME
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
401 info->name = thread->get_name();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
402 #else
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
403 info->name = NULL;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
404 #endif
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
405 info->set_pri = thread->get_priority();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
406 info->cur_pri = thread->get_current_priority();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
407 info->stack_base = thread->get_stack_base();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
408 info->stack_size = thread->get_stack_size();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
409
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
410 #ifdef CYGFUN_KERNEL_THREADS_STACK_MEASUREMENT
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
411 info->stack_used = thread->measure_stack_usage();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
412 #else
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
413 info->stack_used = 0;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
414 #endif
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
415 }
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
416 else result = false;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
417
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
418 Cyg_Scheduler::unlock();
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
419
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
420 return result;
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
421 }
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
422
a65a4055f146 * src/common/kapi.cxx:
nickg
parents: 210
diff changeset
423 /*---------------------------------------------------------------------------*/
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
424 /* Per-thread data */
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
425
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
426 #ifdef CYGVAR_KERNEL_THREADS_DATA
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
427
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
428 externC cyg_ucount32 cyg_thread_new_data_index()
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
429 {
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 179
diff changeset
430 Cyg_Thread::cyg_data_index index = Cyg_Thread::new_data_index();
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 179
diff changeset
431 CYG_ASSERT(index >= 0, "failed to allocate data index" );
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 179
diff changeset
432 return index;
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
433 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
434
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
435 externC void cyg_thread_free_data_index(cyg_ucount32 index)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
436 {
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 179
diff changeset
437 Cyg_Thread::free_data_index(index);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
438 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
439
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
440 externC CYG_ADDRWORD cyg_thread_get_data(cyg_ucount32 index)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
441 {
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 179
diff changeset
442 return Cyg_Thread::get_data(index);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
443 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
444
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
445 externC CYG_ADDRWORD *cyg_thread_get_data_ptr(cyg_ucount32 index)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
446 {
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 179
diff changeset
447 return Cyg_Thread::get_data_ptr(index);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
448 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
449
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
450 externC void cyg_thread_set_data(cyg_ucount32 index, CYG_ADDRWORD
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
451 data)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
452 {
182
f62680ef1804 Merge from eCos master repository on 2001-09-07-06:43:02-BST
jlarmour
parents: 179
diff changeset
453 Cyg_Thread::self()->set_data(index, data);
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
454 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
455 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
456
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
457 /*---------------------------------------------------------------------------*/
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
458 /* Thread destructors */
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
459
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
460 #ifdef CYGPKG_KERNEL_THREADS_DESTRUCTORS
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
461 __externC cyg_bool_t
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
462 cyg_thread_add_destructor( cyg_thread_destructor_fn fn,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
463 cyg_addrword_t data )
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
464 {
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
465 return Cyg_Thread::self()->add_destructor( fn, data );
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
466 }
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
467
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
468 __externC cyg_bool_t
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
469 cyg_thread_rem_destructor( cyg_thread_destructor_fn fn,
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
470 cyg_addrword_t data )
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
471 {
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
472 return Cyg_Thread::self()->rem_destructor( fn, data );
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
473 }
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
474 #endif
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
475
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
476 /*---------------------------------------------------------------------------*/
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
477 /* Exception handling. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
478
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
479 #ifdef CYGPKG_KERNEL_EXCEPTIONS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
480 externC void cyg_exception_set_handler(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
481 cyg_code_t exception_number,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
482 cyg_exception_handler_t *new_handler,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
483 cyg_addrword_t new_data,
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
484 cyg_exception_handler_t **old_handler,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
485 cyg_addrword_t *old_data
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
486 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
487 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
488 Cyg_Thread::register_exception(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
489 exception_number,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
490 (cyg_exception_handler *)new_handler,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
491 (CYG_ADDRWORD)new_data,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
492 (cyg_exception_handler **)old_handler,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 (CYG_ADDRWORD *)old_data
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
495 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
496
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
497 /* Clear exception handler to default */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
498 externC void cyg_exception_clear_handler(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
499 cyg_code_t exception_number
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
500 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
501 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
502 Cyg_Thread::deregister_exception( exception_number );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
503 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
504
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
505 /* Invoke exception handler */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
506 externC void cyg_exception_call_handler(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
507 cyg_handle_t thread,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
508 cyg_code_t exception_number,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
509 cyg_addrword_t error_code
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
510 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
511 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
512 Cyg_Thread *t = (Cyg_Thread *)thread;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
513
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
514 t->deliver_exception( exception_number, error_code );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
515 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
516 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
517
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
518 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
519 /* Interrupt handling */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
520
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
521 externC void cyg_interrupt_create(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
522 cyg_vector_t vector, /* Vector to attach to */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
523 cyg_priority_t priority, /* Queue priority */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
524 cyg_addrword_t data, /* Data pointer */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
525 cyg_ISR_t *isr, /* Interrupt Service Routine */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
526 cyg_DSR_t *dsr, /* Deferred Service Routine */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
527 cyg_handle_t *handle, /* returned handle */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
528 cyg_interrupt *intr /* put interrupt here */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
529 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
530 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
531 CYG_ASSERT_SIZES( cyg_interrupt, Cyg_Interrupt );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
532
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
533 Cyg_Interrupt *t = new((void *)intr) Cyg_Interrupt (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
534 (cyg_vector)vector,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
535 (cyg_priority)priority,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
536 (CYG_ADDRWORD)data,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
537 (cyg_ISR *)isr,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
538 (cyg_DSR *)dsr );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
539 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
540
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
541 CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
542 *handle = (cyg_handle_t)intr;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
543 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
544
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
545 externC void cyg_interrupt_delete( cyg_handle_t interrupt)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
546 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
547 ((Cyg_Interrupt *)interrupt)->~Cyg_Interrupt();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
548 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
549
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
550 void cyg_interrupt_attach( cyg_handle_t interrupt )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
551 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
552 ((Cyg_Interrupt *)interrupt)->attach();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
553 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
554
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
555 void cyg_interrupt_detach( cyg_handle_t interrupt )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
556 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
557 ((Cyg_Interrupt *)interrupt)->detach();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
558 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
559
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
560 /* VSR manipulation */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
561
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
562 externC void cyg_interrupt_get_vsr(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
563 cyg_vector_t vector, /* vector to get */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
564 cyg_VSR_t **vsr /* vsr got */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
565 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
566 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
567 Cyg_Interrupt::get_vsr( (cyg_vector)vector, (cyg_VSR **)vsr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
568 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
569
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 externC void cyg_interrupt_set_vsr(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571 cyg_vector_t vector, /* vector to set */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
572 cyg_VSR_t *vsr /* vsr to set */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
573 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
574 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
575 Cyg_Interrupt::set_vsr( (cyg_vector)vector, (cyg_VSR *)vsr);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
576 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
577
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
578 /* CPU level interrupt mask */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
579 externC void cyg_interrupt_disable()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
580 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
581 Cyg_Interrupt::disable_interrupts();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
582 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
583
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
584 externC void cyg_interrupt_enable()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
585 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
586 Cyg_Interrupt::enable_interrupts();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
587 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
588
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
589 /* Interrupt controller access */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
590 externC void cyg_interrupt_mask(cyg_vector_t vector)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
591 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
592 Cyg_Interrupt::mask_interrupt( (cyg_vector)vector);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
593 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
594
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
595 externC void cyg_interrupt_mask_intunsafe(cyg_vector_t vector)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
596 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
597 Cyg_Interrupt::mask_interrupt_intunsafe( (cyg_vector)vector);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
598 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
599
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
600 externC void cyg_interrupt_unmask(cyg_vector_t vector)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
601 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
602 Cyg_Interrupt::unmask_interrupt( (cyg_vector)vector);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
603 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
604
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
605 externC void cyg_interrupt_unmask_intunsafe(cyg_vector_t vector)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
606 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
607 Cyg_Interrupt::unmask_interrupt_intunsafe( (cyg_vector)vector);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
608 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
609
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
610 externC void cyg_interrupt_acknowledge(cyg_vector_t vector)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
611 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
612 Cyg_Interrupt::acknowledge_interrupt( (cyg_vector)vector);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
613 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
614
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
615
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
616 externC void cyg_interrupt_configure(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
617 cyg_vector_t vector, /* vector to configure */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
618 cyg_bool_t level, /* level or edge triggered */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
619 cyg_bool_t up /* rising/faling edge, high/low level*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
620 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
621 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
622 Cyg_Interrupt::configure_interrupt( (cyg_vector)vector, level, up );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
623 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
624
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
625 externC void cyg_interrupt_set_cpu(
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
626 cyg_vector_t vector, /* vector to control */
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
627 cyg_cpu_t cpu /* CPU to set */
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
628 )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
629 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
630 #ifdef CYGPKG_KERNEL_SMP_SUPPORT
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
631 Cyg_Interrupt::set_cpu( vector, cpu );
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
632 #endif
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
633 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
634
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
635 externC cyg_cpu_t cyg_interrupt_get_cpu(
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
636 cyg_vector_t vector /* vector to control */
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
637 )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
638 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
639 #ifdef CYGPKG_KERNEL_SMP_SUPPORT
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
640 return Cyg_Interrupt::get_cpu( vector );
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
641 #else
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
642 return CYG_KERNEL_CPU_THIS();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
643 #endif
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
644
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
645 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
646
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
647 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
648 /* Counters, Clocks and Alarms */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
649
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
650 externC void cyg_counter_create(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
651 cyg_handle_t *handle, /* returned counter handle */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
652 cyg_counter *counter /* put counter here */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
653 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
654 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
655 CYG_ASSERT_SIZES( cyg_counter, Cyg_Counter );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
656
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
657 Cyg_Counter *t = new((void *)counter) Cyg_Counter ();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
658 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
659
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
660 CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
661 *handle = (cyg_handle_t)counter;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
662 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
663
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
664 externC void cyg_counter_delete(cyg_handle_t counter)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
665 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
666 ((Cyg_Counter *)counter)->~Cyg_Counter();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
667 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
668
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
669 /* Return current value of counter */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
670 externC cyg_tick_count_t cyg_counter_current_value(cyg_handle_t counter)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
671 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
672 return ((Cyg_Counter *)counter)->current_value();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
673 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
674
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
675 /* Set new current value */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
676 externC void cyg_counter_set_value(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
677 cyg_handle_t counter,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
678 cyg_tick_count_t new_value
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
679 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
680 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
681 ((Cyg_Counter *)counter)->set_value( new_value );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
682 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
683
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
684 /* Advance counter by one tick */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
685 externC void cyg_counter_tick(cyg_handle_t counter)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
686 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
687 ((Cyg_Counter *)counter)->tick();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
688 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
689
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
690 /* Advance counter by multiple ticks */
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
691 externC void cyg_counter_multi_tick(cyg_handle_t counter, cyg_tick_count_t ticks)
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
692 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
693 ((Cyg_Counter *)counter)->tick(ticks);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
694 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
695
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
696 /* Create a clock object */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
697 externC void cyg_clock_create(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
698 cyg_resolution_t resolution, /* Initial resolution */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
699 cyg_handle_t *handle, /* Returned clock handle */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
700 cyg_clock *clock /* put clock here */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
701 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
702 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
703 CYG_ASSERT_SIZES( cyg_clock, Cyg_Clock );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
704
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
705 Cyg_Clock::cyg_resolution res;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
706
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
707 res.dividend = resolution.dividend;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
708 res.divisor = resolution.divisor;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
709
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
710 Cyg_Clock *t = new((void *)clock) Cyg_Clock ( res );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
711 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
712
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
713 CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
714 *handle = (cyg_handle_t)clock;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
715 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
716
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
717 externC void cyg_clock_delete(cyg_handle_t clock)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
718 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
719 ((Cyg_Clock *)clock)->~Cyg_Clock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
720 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
721
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
722 /* convert a clock handle to a counter handle so we can use the */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
723 /* counter API on it. */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
724 externC void cyg_clock_to_counter(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
725 cyg_handle_t clock,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
726 cyg_handle_t *counter
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
727 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
728 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
729 CYG_CHECK_DATA_PTR( counter, "Bad counter handle pointer" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
730 *counter = (cyg_handle_t)(Cyg_Counter *)clock;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
731 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
732
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
733 externC void cyg_clock_set_resolution(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
734 cyg_handle_t clock,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
735 cyg_resolution_t resolution /* New resolution */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
736 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
737 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
738 Cyg_Clock::cyg_resolution res;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
739
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
740 res.dividend = resolution.dividend;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
741 res.divisor = resolution.divisor;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
742
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
743 ((Cyg_Clock *)clock)->set_resolution( res );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
744 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
745
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
746 externC cyg_resolution_t cyg_clock_get_resolution(cyg_handle_t clock)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
747 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
748 Cyg_Clock::cyg_resolution res =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
749 ((Cyg_Clock *)clock)->get_resolution();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
750
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
751 cyg_resolution_t resolution;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
752
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
753 resolution.dividend = res.dividend;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
754 resolution.divisor = res.divisor;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
755
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
756 return resolution;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
757 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
758
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
759 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
760 externC cyg_handle_t cyg_real_time_clock(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
761 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
762 return (cyg_handle_t)Cyg_Clock::real_time_clock;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
763 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
764
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
765 externC cyg_tick_count_t cyg_current_time(void)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
766 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
767 return Cyg_Clock::real_time_clock->current_value();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
768 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
769 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
770
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
771 externC void cyg_alarm_create(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
772 cyg_handle_t counter, /* Attached to this counter */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
773 cyg_alarm_t *alarmfn, /* Call-back function */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
774 cyg_addrword_t data, /* Call-back data */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
775 cyg_handle_t *handle, /* Returned alarm object */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
776 cyg_alarm *alarm /* put alarm here */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
777 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
778 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
779 CYG_ASSERT_SIZES( cyg_alarm, Cyg_Alarm );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
780
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
781 Cyg_Alarm *t = new((void *)alarm) Cyg_Alarm (
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
782 (Cyg_Counter *)counter,
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
783 (cyg_alarm_fn *)alarmfn,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
784 (CYG_ADDRWORD)data
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
785 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
786 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
787
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
788 CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
789 *handle = (cyg_handle_t)alarm;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
790 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
791
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
792 /* Disable alarm, detach from counter and invalidate handles */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
793 externC void cyg_alarm_delete( cyg_handle_t alarm)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
794 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
795 ((Cyg_Alarm *)alarm)->~Cyg_Alarm();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
796 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
797
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
798 externC void cyg_alarm_initialize(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
799 cyg_handle_t alarm,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
800 cyg_tick_count_t trigger, /* Absolute trigger time */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
801 cyg_tick_count_t interval /* Relative retrigger interval */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
802 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
803 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
804 ((Cyg_Alarm *)alarm)->initialize(
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
805 (cyg_tick_count)trigger,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
806 (cyg_tick_count)interval);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
807 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
808
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
809 externC void cyg_alarm_get_times(
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
810 cyg_handle_t alarm,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
811 cyg_tick_count_t *trigger, /* Next trigger time */
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
812 cyg_tick_count_t *interval /* Current interval */
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
813 )
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
814 {
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
815 ((Cyg_Alarm *)alarm)->get_times(
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
816 (cyg_tick_count*)trigger,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
817 (cyg_tick_count*)interval);
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
818 }
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 182
diff changeset
819
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
820 externC void cyg_alarm_enable( cyg_handle_t alarm )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
821 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
822 ((Cyg_Alarm *)alarm)->enable();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
823 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
824
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
825 externC void cyg_alarm_disable( cyg_handle_t alarm )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
826 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
827 ((Cyg_Alarm *)alarm)->disable();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
828 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
829
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
830 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
831 /* Mail boxes */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
832
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
833 externC void cyg_mbox_create(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
834 cyg_handle_t *handle,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
835 cyg_mbox *mbox
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
836 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
837 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
838 CYG_ASSERT_SIZES( cyg_mbox, Cyg_Mbox );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
839
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
840 Cyg_Mbox *t = new((void *)mbox) Cyg_Mbox();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
841 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
842
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
843 CYG_CHECK_DATA_PTR( handle, "Bad handle pointer" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
844 *handle = (cyg_handle_t)mbox;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
845 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
846
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
847 externC void cyg_mbox_delete(cyg_handle_t mbox)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
848 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
849 ((Cyg_Mbox *)mbox)->~Cyg_Mbox();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
850 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
851
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
852 externC void *cyg_mbox_get(cyg_handle_t mbox)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
853 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
854 return ((Cyg_Mbox *)mbox)->get();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
855 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
856
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
857 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
858 void *cyg_mbox_timed_get(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
859 cyg_handle_t mbox,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
860 cyg_tick_count_t abstime
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
861 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
862 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
863 return ((Cyg_Mbox *)mbox)->get(abstime);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
864 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
865 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
866
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
867 externC void *cyg_mbox_tryget(cyg_handle_t mbox)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
868 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
869 return ((Cyg_Mbox *)mbox)->tryget();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
870 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
871
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
872 externC void *cyg_mbox_peek_item(cyg_handle_t mbox)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
873 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
874 return ((Cyg_Mbox *)mbox)->peek_item();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
875 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
876
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
877 #ifdef CYGMFN_KERNEL_SYNCH_MBOXT_PUT_CAN_WAIT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
878 externC cyg_bool_t cyg_mbox_put(cyg_handle_t mbox, void *item)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
879 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
880 return ((Cyg_Mbox *)mbox)->put(item);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
881 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
882
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
883 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
884 externC cyg_bool_t cyg_mbox_timed_put(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
885 cyg_handle_t mbox,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
886 void *item,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
887 cyg_tick_count_t abstime
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
888 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
889 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
890 return ((Cyg_Mbox *)mbox)->put(item, abstime);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
891 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
892 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
893 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
894
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
895 externC cyg_bool_t cyg_mbox_tryput(cyg_handle_t mbox, void *item)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
896 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
897 return ((Cyg_Mbox *)mbox)->tryput(item);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
898 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
899
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
900 externC cyg_count32 cyg_mbox_peek(cyg_handle_t mbox)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
901 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
902 return ((Cyg_Mbox *)mbox)->peek();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
903 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
904
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
905 externC cyg_bool_t cyg_mbox_waiting_to_get(cyg_handle_t mbox)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
906 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
907 return ((Cyg_Mbox *)mbox)->waiting_to_get();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
908 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
909
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
910 externC cyg_bool_t cyg_mbox_waiting_to_put(cyg_handle_t mbox)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
911 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
912 return ((Cyg_Mbox *)mbox)->waiting_to_put();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
913 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
914
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
915
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
916 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
917 /* Semaphores */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
918
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
919 externC void cyg_semaphore_init(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
920 cyg_sem_t *sem, /* Semaphore to init */
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
921 cyg_count32 val /* Initial semaphore value */
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
922 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
923 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
924 CYG_ASSERT_SIZES( cyg_sem_t, Cyg_Counting_Semaphore );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
925
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
926 Cyg_Counting_Semaphore *t = new((void *)sem) Cyg_Counting_Semaphore(val);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
927 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
928 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
929
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
930 externC void cyg_semaphore_destroy( cyg_sem_t *sem )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
931 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
932 ((Cyg_Counting_Semaphore *)sem)->~Cyg_Counting_Semaphore();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
933 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
934
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 105
diff changeset
935 externC cyg_bool_t cyg_semaphore_wait( cyg_sem_t *sem )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
936 {
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 105
diff changeset
937 return ((Cyg_Counting_Semaphore *)sem)->wait();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
938 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
939
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
940 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
941 externC cyg_bool_t cyg_semaphore_timed_wait(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
942 cyg_sem_t *sem,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
943 cyg_tick_count_t abstime
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
944 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
945 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
946 return ((Cyg_Counting_Semaphore *)sem)->wait(abstime);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
947 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
948 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
949
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
950
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
951 externC int cyg_semaphore_trywait( cyg_sem_t *sem )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
952 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
953 return ((Cyg_Counting_Semaphore *)sem)->trywait();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
954 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
955
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
956 externC void cyg_semaphore_post( cyg_sem_t *sem )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
957 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
958 ((Cyg_Counting_Semaphore *)sem)->post();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
959 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
960
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
961 externC void cyg_semaphore_peek( cyg_sem_t *sem, cyg_count32 *val )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
962 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
963 CYG_CHECK_DATA_PTR( val, "Bad val parameter" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
964
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
965 *val = ((Cyg_Counting_Semaphore *)sem)->peek();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
966 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
967
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
968
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
969 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
970 /* Flags */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
971
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
972 void cyg_flag_init(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
973 cyg_flag_t *flag /* Flag to init */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
974 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
975 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
976 CYG_ASSERT_SIZES( cyg_flag_t, Cyg_Flag );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
977 CYG_ASSERT(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
978 ( Cyg_Flag::AND == CYG_FLAG_WAITMODE_AND ) &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
979 ( Cyg_Flag::OR == CYG_FLAG_WAITMODE_OR ) &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
980 ( Cyg_Flag::CLR == CYG_FLAG_WAITMODE_CLR ),
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
981 "CYG_FLAG_WAITMODE_xxx definition != C++ Cyg_Flag::xxx" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
982
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
983 Cyg_Flag *t = new((void *)flag) Cyg_Flag();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
984 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
985 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
986
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
987 void cyg_flag_destroy( cyg_flag_t *flag )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
988 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
989 ((Cyg_Flag *)flag)->~Cyg_Flag();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
990 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
991
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
992 void cyg_flag_setbits( cyg_flag_t *flag, cyg_flag_value_t value)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
993 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
994 ((Cyg_Flag *)flag)->setbits( value );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
995 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
996
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
997 void cyg_flag_maskbits( cyg_flag_t *flag, cyg_flag_value_t value)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
998 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
999 ((Cyg_Flag *)flag)->maskbits( value );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1000 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1001
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1002 cyg_flag_value_t cyg_flag_wait( cyg_flag_t *flag,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1003 cyg_flag_value_t pattern,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1004 cyg_flag_mode_t mode )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1005 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1006 if ( 0 == pattern || 0 != (mode & ~3) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1007 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1008 return ((Cyg_Flag *)flag)->wait( pattern, mode );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1009
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1010 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1011
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1012 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1013 cyg_flag_value_t cyg_flag_timed_wait( cyg_flag_t *flag,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1014 cyg_flag_value_t pattern,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1015 cyg_flag_mode_t mode,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1016 cyg_tick_count_t abstime )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1017 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1018 if ( 0 == pattern || 0 != (mode & ~3) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1019 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1020 return ((Cyg_Flag *)flag)->wait( pattern, mode, abstime );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1021
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1022 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1023 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1024
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1025 cyg_flag_value_t cyg_flag_poll( cyg_flag_t *flag,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1026 cyg_flag_value_t pattern,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1027 cyg_flag_mode_t mode )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1028 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1029 if ( 0 == pattern || 0 != (mode & ~3) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1030 return 0;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1031 return ((Cyg_Flag *)flag)->poll( pattern, mode );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1032
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1033 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1034
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1035 cyg_flag_value_t cyg_flag_peek( cyg_flag_t *flag )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1036 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1037 return ((Cyg_Flag *)flag)->peek();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1038 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1039
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1040 cyg_bool_t cyg_flag_waiting( cyg_flag_t *flag )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1041 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1042 return ((Cyg_Flag *)flag)->waiting();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1043 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1044
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1045 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1046 /* Mutex */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1047
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1048 externC void cyg_mutex_init(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1049 cyg_mutex_t *mutex /* Mutex to init */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1050 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1051 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1052 CYG_ASSERT_SIZES( cyg_mutex_t, Cyg_Mutex );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1053
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1054 Cyg_Mutex *m = new((void *)mutex) Cyg_Mutex;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1055
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1056 m=m;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1057 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1058
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1059 externC void cyg_mutex_destroy( cyg_mutex_t *mutex )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1060 {
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 10
diff changeset
1061 ((Cyg_Mutex *)mutex)->~Cyg_Mutex();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1062 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1063
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1064 externC cyg_bool_t cyg_mutex_lock( cyg_mutex_t *mutex )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1065 {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1066 return ((Cyg_Mutex *)mutex)->lock();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1067 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1068
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1069 externC cyg_bool_t cyg_mutex_trylock( cyg_mutex_t *mutex )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1070 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1071 return ((Cyg_Mutex *)mutex)->trylock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1072 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1073
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1074 externC void cyg_mutex_unlock( cyg_mutex_t *mutex )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1075 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1076 ((Cyg_Mutex *)mutex)->unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1077 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1078
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1079 externC void cyg_mutex_release( cyg_mutex_t *mutex )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1080 {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1081 ((Cyg_Mutex *)mutex)->release();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1082 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1083
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1084 #ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_CEILING
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1085 externC void cyg_mutex_set_ceiling(
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1086 cyg_mutex_t *mutex,
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1087 cyg_priority_t priority )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1088 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1089 ((Cyg_Mutex *)mutex)->set_ceiling(priority);
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1090 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1091 #endif
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1092
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1093 #ifdef CYGSEM_KERNEL_SYNCH_MUTEX_PRIORITY_INVERSION_PROTOCOL_DYNAMIC
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1094 externC void cyg_mutex_set_protocol(
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1095 cyg_mutex_t *mutex,
179
391299f9e541 Merge from eCos master repository on 2001-08-17-16:31:54-BST
jlarmour
parents: 178
diff changeset
1096 enum cyg_mutex_protocol protocol )
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1097 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1098 ((Cyg_Mutex *)mutex)->set_protocol((Cyg_Mutex::cyg_protcol)protocol);
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1099 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1100 #endif
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1101
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1102 /*---------------------------------------------------------------------------*/
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1103 /* Condition Variables */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1104
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1105 externC void cyg_cond_init(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1106 cyg_cond_t *cond, /* condition variable to init */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1107 cyg_mutex_t *mutex /* associated mutex */
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1108 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1109 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1110 CYG_ASSERT_SIZES( cyg_cond_t, Cyg_Condition_Variable );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1111
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1112 Cyg_Condition_Variable *t = new((void *)cond) Cyg_Condition_Variable(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1113 *(Cyg_Mutex *)mutex);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1114 t=t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1115 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1116
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1117 externC void cyg_cond_destroy( cyg_cond_t *cond )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1118 {
38
e7ba79f6d3a8 Merge from eCos master repository on 1999-09-23-20:10:25-BST
jlarmour
parents: 10
diff changeset
1119 ((Cyg_Condition_Variable *)cond)->~Cyg_Condition_Variable();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1120 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1121
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 105
diff changeset
1122 externC cyg_bool_t cyg_cond_wait( cyg_cond_t *cond )
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1123 {
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 105
diff changeset
1124 return ((Cyg_Condition_Variable *)cond)->wait();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1125 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1126
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1127 externC void cyg_cond_signal( cyg_cond_t *cond )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1128 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1129 ((Cyg_Condition_Variable *)cond)->signal();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1130 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1131
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1132 externC void cyg_cond_broadcast( cyg_cond_t *cond )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1133 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1134 ((Cyg_Condition_Variable *)cond)->broadcast();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1135 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1136
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1137 #ifdef CYGMFN_KERNEL_SYNCH_CONDVAR_TIMED_WAIT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1138 externC cyg_bool_t cyg_cond_timed_wait(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1139 cyg_cond_t *cond,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1140 cyg_tick_count_t abstime
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1141 )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1142 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1143 return ((Cyg_Condition_Variable *)cond)->wait(abstime);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1144 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1145
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1146 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1147
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1148 /*---------------------------------------------------------------------------*/
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1149 /* Spinlocks */
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1150
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1151 externC void cyg_spinlock_init(
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1152 cyg_spinlock_t *lock, /* spinlock to initialize */
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1153 cyg_bool_t locked /* init locked or unlocked */
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1154 )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1155 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1156 CYG_ASSERT_SIZES( cyg_spinlock_t, Cyg_SpinLock );
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1157
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1158 // Create the spinlock in cleared state
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1159 Cyg_SpinLock *t = new((void *)lock) Cyg_SpinLock();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1160
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1161 // If the lock is to start locked, then lock it now.
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1162 if( locked )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1163 t->spin();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1164 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1165
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1166 externC void cyg_spinlock_destroy( cyg_spinlock_t *lock )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1167 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1168 ((Cyg_SpinLock *)lock)->~Cyg_SpinLock();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1169 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1170
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1171 externC void cyg_spinlock_spin( cyg_spinlock_t *lock )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1172 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1173 ((Cyg_SpinLock *)lock)->spin();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1174 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1175
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1176 externC void cyg_spinlock_clear( cyg_spinlock_t *lock )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1177 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1178 ((Cyg_SpinLock *)lock)->clear();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1179 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1180
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1181 externC cyg_bool_t cyg_spinlock_try( cyg_spinlock_t *lock )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1182 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1183 return ((Cyg_SpinLock *)lock)->trylock();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1184 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1185
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1186 externC cyg_bool_t cyg_spinlock_test( cyg_spinlock_t *lock )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1187 {
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1188 return ((Cyg_SpinLock *)lock)->test();
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1189 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1190
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1191 externC void cyg_spinlock_spin_intsave( cyg_spinlock_t *lock,
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1192 cyg_addrword_t *istate )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1193 {
178
aa8364213009 Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents: 177
diff changeset
1194 ((Cyg_SpinLock *)lock)->spin_intsave((CYG_INTERRUPT_STATE *)istate);
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1195 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1196
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1197 externC void cyg_spinlock_clear_intsave( cyg_spinlock_t *lock,
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1198 cyg_addrword_t istate )
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1199 {
178
aa8364213009 Merge from eCos master repository on 2001-08-15-01:50:29-BST
jlarmour
parents: 177
diff changeset
1200 ((Cyg_SpinLock *)lock)->clear_intsave((CYG_INTERRUPT_STATE)istate);
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1201 }
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1202
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1203
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1204 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1205 // Check structure sizes.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1206 // This class and constructor get run automatically in debug versions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1207 // of the kernel and check that the structures configured in the C
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1208 // code are the same size as the C++ classes they should match.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1209
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1210 #ifdef CYGPKG_INFRA_DEBUG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1211
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1212 class Cyg_Check_Structure_Sizes
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1213 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1214 int dummy;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1215 public:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1216 Cyg_Check_Structure_Sizes( int x );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1217
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1218 };
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1219
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1220 #define CYG_CHECK_SIZES(cstruct, cxxstruct) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1221 if( sizeof(cstruct) != sizeof(cxxstruct) ) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1222 { \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1223 char *fmt = "Size of C struct " #cstruct \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1224 " != size of C++ struct " #cxxstruct ; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1225 CYG_TRACE2(1, fmt, sizeof(cstruct) , sizeof(cxxstruct) ); \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1226 fail = true; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1227 fmt = fmt; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1228 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1229
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1230 Cyg_Check_Structure_Sizes::Cyg_Check_Structure_Sizes(int x)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1231 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1232 cyg_bool fail = false;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1233
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1234 dummy = x+1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1235
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1236 CYG_CHECK_SIZES( cyg_thread, Cyg_Thread );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1237 CYG_CHECK_SIZES( cyg_interrupt, Cyg_Interrupt );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1238 CYG_CHECK_SIZES( cyg_counter, Cyg_Counter );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1239 CYG_CHECK_SIZES( cyg_clock, Cyg_Clock );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1240 CYG_CHECK_SIZES( cyg_alarm, Cyg_Alarm );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1241 CYG_CHECK_SIZES( cyg_mbox, Cyg_Mbox );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1242 CYG_CHECK_SIZES( cyg_sem_t, Cyg_Counting_Semaphore );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1243 CYG_CHECK_SIZES( cyg_flag_t, Cyg_Flag );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1244 CYG_CHECK_SIZES( cyg_mutex_t, Cyg_Mutex );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1245 CYG_CHECK_SIZES( cyg_cond_t, Cyg_Condition_Variable );
177
4c750ce71ae3 Merge from eCos master repository on 2001-08-10-19:22:57-BST
jlarmour
parents: 147
diff changeset
1246 CYG_CHECK_SIZES( cyg_spinlock_t, Cyg_SpinLock );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1247
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1248 CYG_ASSERT( !fail, "Size checks failed");
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1249 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1250
115
6ed91473a1cd Merge from eCos master repository on 2000-08-21-22:40:54-BST
jlarmour
parents: 105
diff changeset
1251 static Cyg_Check_Structure_Sizes cyg_kapi_check_structure_sizes(1);
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1252
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1253 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1254
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1255
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1256 // -------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1257
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1258 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1259 // EOF common/kapi.cxx