annotate packages/compat/uitron/current/include/uit_func.inl @ 76:435cced73e2f ecos-v1_3_1-release

eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
author jlarmour
date Tue, 28 Mar 2000 14:10:45 +0000
parents bf00f99aec69
children 6ed91473a1cd
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 #ifndef CYGONCE_COMPAT_UITRON_UIT_FUNC_INL
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 #define CYGONCE_COMPAT_UITRON_UIT_FUNC_INL
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 //===========================================================================
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 // uit_func.inl
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
7 // uITRON compatibility functions
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
10 //####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
11 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
12 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
13 // The contents of this file are subject to the Red Hat eCos Public License
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
14 // Version 1.1 (the "License"); you may not use this file except in
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
15 // compliance with the License. You may obtain a copy of the License at
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
16 // http://www.redhat.com/
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
17 //
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
18 // Software distributed under the License is distributed on an "AS IS"
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
19 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
20 // License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
21 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
22 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
23 // The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
24 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
25 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
26 // The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
27 // Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
28 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
29 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
30 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
31 //
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 //####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 //#####DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 //
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
36 // Author(s): hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
37 // Contributors: hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
38 // Date: 1998-03-13
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
39 // Purpose: uITRON compatibility functions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
40 // Description:
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 //####DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 //===========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 #ifdef CYGPKG_UITRON
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 #ifdef CYGPRI_UITRON_FUNCS_HERE_AND_NOW
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 #include <cyg/compat/uitron/uit_objs.hxx> // uITRON setup CYGNUM_UITRON_SEMAS
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 // kernel facilities only needed here
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 #include <cyg/kernel/intr.hxx>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 #include <cyg/kernel/sched.hxx>
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 // and the implementations of other kernel facilities
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 #include <cyg/kernel/thread.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 #include <cyg/kernel/sched.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59 #include <cyg/kernel/clock.inl>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
61
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
62 // ------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
63 // The variable where dis_dsp/ena_dsp state is held:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
64 extern cyg_uint32 cyg_uitron_dis_dsp_old_priority;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
65
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 // ------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 // Parameter checking; either check the expression and return an error code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 // if not true, or assert the truth with a made-up message.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 #ifdef CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 // default: uitron error codes are returned
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
72 #define CYG_UIT_PARAMCHECK( _true_, _error_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
73 if ( ! (_true_) ) return (_error_); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 // ...but they are asserted if asserts are on
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
77 #define CYG_UIT_PARAMCHECK( _true_, _error_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
78 CYG_ASSERT( (_true_), "CYG_UIT_PARAMCHECK fail: " #_true_ ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 #endif // else !CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS
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 // CYG_UITRON_CHECK_AND_GETP
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 // Macro to rangecheck and do the addressing of a static uitron system
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 // object; _which_ sort of object is given, and token pasting is used
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 // horribly to get the static array, limits and the like.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 // Usage:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 // INT snd_msg( ID mbxid, ... ) {
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
91 // Cyg_Mbox *p;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
92 // CYG_UITRON_CHECK_AND_GETP_MBOXES( mbxid, p );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
93 // p->...(...);
0
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 // internal: plain assignment to the object pointer, from static array
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
96 #define CYG_UIT_SPTR( _which_, _idx_, _ptr_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
97 (_ptr_) = CYG_UITRON_OBJS( _which_ ) + ((_idx_) - 1); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 // internal: plain assignment to the object pointer, from pointer array
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 // with error checking.
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
102 #define CYG_UIT_SPTR_PTR( _which_, _idx_, _ptr_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
103 (_ptr_) = CYG_UITRON_PTRS( _which_ )[ ((_idx_) - 1) ]; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
104 if ( NULL == (_ptr_) ) return E_NOEXS; \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
107 #define CYG_UITRON_CHECK_AND_GETP_DIRECT( _which_, _idx_, _ptr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
108 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
109 CYG_UIT_PARAMCHECK( 0 < (_idx_), E_ID ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
110 CYG_UIT_PARAMCHECK( CYG_UITRON_NUM( _which_ ) >= (_idx_), E_ID ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
111 CYG_UIT_SPTR( _which_, _idx_, _ptr_ ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
114 #define CYG_UITRON_CHECK_AND_GETP_INDIRECT( _which_, _idx_, _ptr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
115 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
116 CYG_UIT_PARAMCHECK( 0 < (_idx_), E_ID ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
117 CYG_UIT_PARAMCHECK( CYG_UITRON_NUM( _which_ ) >= (_idx_), E_ID ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
118 CYG_UIT_SPTR_PTR( _which_, _idx_, _ptr_ ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 // As above but for handler numbers which return E_PAR when out of range
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
122 #define CYG_UITRON_CHECK_AND_GETHDLR( _which_, _num_, _ptr_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
123 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
124 CYG_UIT_PARAMCHECK( 0 < (_num_), E_PAR ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 CYG_UIT_PARAMCHECK( CYG_UITRON_NUM( _which_ ) >= (_num_), E_PAR ); \
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
126 CYG_UIT_SPTR( _which_, _num_, _ptr_ ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 // And a macro to check that creation of an object is OK
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
130 #define CYG_UITRON_CHECK_NO_OBJ_LOCK_SCHED( _which_, _idx_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
131 CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
132 CYG_UIT_PARAMCHECK( 0 < (_idx_), E_ID ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
133 CYG_UIT_PARAMCHECK( CYG_UITRON_NUM( _which_ ) >= (_idx_), E_ID ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
134 Cyg_Scheduler::lock(); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
135 if ( NULL != CYG_UITRON_PTRS( _which_ )[ ((_idx_) - 1) ] ) { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
136 Cyg_Scheduler::unlock(); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
137 return E_OBJ; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
138 } \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 // define a magic new operator in order to call constructors
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
142 #define CYG_UITRON_NEWFUNCTION( _class_ ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
143 inline void *operator new(size_t size, _class_ *ptr) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
144 { \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
145 CYG_CHECK_DATA_PTR( ptr, "Bad pointer" ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
146 return ptr; \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 // now configury to support selectable create/delete support ie. an
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 // array of pointers to the objects themselves.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 #ifdef CYGPKG_UITRON_TASKS_CREATE_DELETE
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
152 #define CYG_UITRON_CHECK_AND_GETP_TASKS( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 CYG_UITRON_CHECK_AND_GETP_INDIRECT( TASKS, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
155 #define CYG_UITRON_CHECK_AND_GETP_TASKS( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 CYG_UITRON_CHECK_AND_GETP_DIRECT( TASKS, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 #ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
160 #define CYG_UITRON_CHECK_AND_GETP_SEMAS( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 CYG_UITRON_CHECK_AND_GETP_INDIRECT( SEMAS, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
163 #define CYG_UITRON_CHECK_AND_GETP_SEMAS( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 CYG_UITRON_CHECK_AND_GETP_DIRECT( SEMAS, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167 #ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
168 #define CYG_UITRON_CHECK_AND_GETP_MBOXES( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 CYG_UITRON_CHECK_AND_GETP_INDIRECT( MBOXES, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
171 #define CYG_UITRON_CHECK_AND_GETP_MBOXES( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 CYG_UITRON_CHECK_AND_GETP_DIRECT( MBOXES, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 #ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
176 #define CYG_UITRON_CHECK_AND_GETP_FLAGS( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 CYG_UITRON_CHECK_AND_GETP_INDIRECT( FLAGS, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
179 #define CYG_UITRON_CHECK_AND_GETP_FLAGS( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 CYG_UITRON_CHECK_AND_GETP_DIRECT( FLAGS, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 #ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
184 #define CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 CYG_UITRON_CHECK_AND_GETP_INDIRECT( MEMPOOLFIXED, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
187 #define CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 CYG_UITRON_CHECK_AND_GETP_DIRECT( MEMPOOLFIXED, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 #ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
192 #define CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 CYG_UITRON_CHECK_AND_GETP_INDIRECT( MEMPOOLVAR, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
195 #define CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( _idx_, _ptr_ ) \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 CYG_UITRON_CHECK_AND_GETP_DIRECT( MEMPOOLVAR, _idx_, _ptr_ )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 // ------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200 // Common error checking macros
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 #if !defined( CYGSEM_UITRON_BAD_PARAMS_RETURN_ERRORS ) && \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 !defined( CYGDBG_USE_ASSERTS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 // if not checking and not asserted, these are removed to avoid usused
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 // variable warnings.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 #define CYG_UITRON_CHECK_TASK_CONTEXT_SELF( _self_ ) CYG_EMPTY_STATEMENT
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
207 #define CYG_UITRON_CHECK_TASK_CONTEXT() CYG_EMPTY_STATEMENT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
208 #define CYG_UITRON_CHECK_DISPATCH_ENABLED() CYG_EMPTY_STATEMENT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 #define CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO( _tmout_ ) CYG_EMPTY_STATEMENT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 // the default:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 // Check a task is actually a uITRON task
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
214 #define CYG_UITRON_CHECK_TASK_CONTEXT_SELF( _self_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
215 CYG_UIT_PARAMCHECK( \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
216 (&cyg_uitron_TASKS[0] <= (_self_)) && \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
217 ((_self_) < &cyg_uitron_TASKS[CYGNUM_UITRON_TASKS]), \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
218 E_CTX ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
221 #define CYG_UITRON_CHECK_TASK_CONTEXT() CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
222 Cyg_Thread *self = Cyg_Thread::self(); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
223 CYG_UITRON_CHECK_TASK_CONTEXT_SELF( self ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 // Check dispatching is enabled for calls which might wait
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
227 #define CYG_UITRON_CHECK_DISPATCH_ENABLED() CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
228 CYG_UIT_PARAMCHECK( 0 == cyg_uitron_dis_dsp_old_priority, E_CTX ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229 CYG_MACRO_END
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 #define CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO(_tmout_) CYG_MACRO_START \
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
232 CYG_UIT_PARAMCHECK( -1 <= (_tmout_), E_PAR ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
233 if ( TMO_POL != (_tmout_) ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
234 CYG_UITRON_CHECK_DISPATCH_ENABLED(); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
239 #ifdef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
240 #define CYG_UIT_PARAMCHECK_PTR( _p_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
241 CYG_UIT_PARAMCHECK( NADR != (_p_), E_PAR ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
243 #else // do check for NULL
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
244 #define CYG_UIT_PARAMCHECK_PTR( _p_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
245 CYG_UIT_PARAMCHECK( NADR != (_p_), E_PAR ); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
246 CYG_UIT_PARAMCHECK( NULL != (_p_), E_PAR ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
247 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
248 #endif // !CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
249
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
250 // ------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
251 // CYG_UITRON_FAIL_RETURN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
252 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
253 // After a call which waits, it might return with success, or due to a
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
254 // timeout or a release wait (a forced escape from the waiting condition).
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
255 // This macro examines context and finds out which, then executes a return
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
256 // with the correct uITRON condition code.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
257
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
258 #define CYG_UITRON_FAIL_RETURN_SELF( _self_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
259 Cyg_Thread::cyg_reason reason = (_self_)->get_wake_reason(); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
260 if ( Cyg_Thread::TIMEOUT == reason ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
261 return E_TMOUT; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
262 if ( Cyg_Thread::BREAK == reason ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
263 return E_RLWAI; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
264 if ( Cyg_Thread::DESTRUCT == reason ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
265 return E_DLT; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
266 return E_SYS; /* if no plausible reason was found */ \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
269 #define CYG_UITRON_FAIL_RETURN() CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
270 Cyg_Thread *self = Cyg_Thread::self(); \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
271 CYG_UITRON_FAIL_RETURN_SELF( self ); \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
272 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
273
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
274 // ------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
275 // Interrupts disabled?
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
276 #define CYG_UITRON_CHECK_CPU_UNLOC() \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
277 CYG_UIT_PARAMCHECK( (Cyg_Interrupt::interrupts_enabled()), E_CTX )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
278
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
279 // ------------------------------------------------------------------------
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
280 // Timing: is it in eCos clock ticks or milliSeconds (or something else?)
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
281
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
282 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
283
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
284 #ifdef CYGSEM_UITRON_TIME_IS_MILLISECONDS
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
285 extern Cyg_Clock::converter uit_clock_to_system;
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
286 extern Cyg_Clock::converter uit_clock_from_system;
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
287
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
288 #define CYG_UITRON_TIME_UIT_TO_SYS32( t ) \
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
289 Cyg_Clock::convert( (cyg_uint64)(t), &uit_clock_to_system )
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
290
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
291 #define CYG_UITRON_TIME_SYS_TO_UIT32( t ) \
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
292 Cyg_Clock::convert( (cyg_uint64)(t), &uit_clock_from_system )
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
293
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
294 // long (cyg_uint64) versions:
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
295 #define CYG_UITRON_TIME_UIT_TO_SYS64( t ) \
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
296 Cyg_Clock::convert( (t), &uit_clock_to_system )
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
297
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
298 #define CYG_UITRON_TIME_SYS_TO_UIT64( t ) \
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
299 Cyg_Clock::convert( (t), &uit_clock_from_system )
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
300
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
301 #else // Time is whatever the system clock is doing:
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
302
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
303 // Straight through - int (cyg_int32) argument versions:
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
304 #define CYG_UITRON_TIME_UIT_TO_SYS32( t ) ( t )
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
305 #define CYG_UITRON_TIME_SYS_TO_UIT32( t ) ( t )
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
306 // long (cyg_uint64) versions:
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
307 #define CYG_UITRON_TIME_UIT_TO_SYS64( t ) ( t )
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
308 #define CYG_UITRON_TIME_SYS_TO_UIT64( t ) ( t )
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
309 #endif
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
310
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
311 #endif // CYGVAR_KERNEL_COUNTERS_CLOCK - otherwise these should not be used.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
312
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
313 // ------------------------------------------------------------------------
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
314 // the function definitions themselves:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
315
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
316 // ******************************************************
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
317 // *** 6.5 C Language Interfaces ***
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
318 // ******************************************************
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
319
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
320 // - Task Management Functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
321
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
322 #ifdef CYGPKG_UITRON_TASKS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
323 CYG_UITRON_NEWFUNCTION( Cyg_Thread )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
324
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
325 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
326 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
327 cre_tsk ( ID tskid, T_CTSK *pk_ctsk )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
328 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
329 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
330 CYG_UIT_PARAMCHECK_PTR( pk_ctsk );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
331 CYG_UITRON_CHECK_NO_OBJ_LOCK_SCHED( TASKS, tskid );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
332
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
333 Cyg_Thread *p = &(CYG_UITRON_OBJS( TASKS )[ tskid - 1 ]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
334 cyg_uint32 state = p->get_state();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
335 if ( 0 == (state & Cyg_Thread::EXITED) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
336 ret = E_OBJ; // how did it get to be running?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
337 else if ( ((INT)p->get_stack_size()) < pk_ctsk->stksz )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
338 ret = E_NOMEM; // more stack requested than available
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
339 else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
340 CYG_UITRON_PTRS( TASKS )[ tskid - 1 ] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
341 new( p ) Cyg_Thread(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
342 (CYG_ADDRWORD) pk_ctsk->itskpri,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
343 (cyg_thread_entry *)pk_ctsk->task,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
344 (CYG_ADDRWORD) 0,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
345 // preserve the original name and stack:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
346 #ifdef CYGVAR_KERNEL_THREADS_NAME
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
347 p->get_name(),
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
348 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
349 NULL,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
350 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
351 p->get_stack_base(),
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
352 p->get_stack_size() );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
353 // but ensure the task state is dormant:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
354 // (it is not constructed dormant, but suspended)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
355 p->kill();
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
356 #ifdef CYGIMP_THREAD_PRIORITY
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
357 // and record the initial priority outside the task too.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
358 CYG_UITRON_TASK_INITIAL_PRIORITY( tskid ) = pk_ctsk->itskpri;
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
359 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
360 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
361 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
362 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
363 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
364
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
365 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
366 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
367 del_tsk ( ID tskid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
368 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
369 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
370 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
371 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
372
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
373 Cyg_Scheduler::lock();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
374 // deal with the race condition here
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
375 if ( p != CYG_UITRON_PTRS( TASKS )[ tskid - 1 ] ) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
376 Cyg_Scheduler::unlock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
377 return E_NOEXS;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
378 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
379 cyg_uint32 state = p->get_state();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
380 if ( state & Cyg_Thread::EXITED )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
381 // just disconnect the pointer from its object
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
382 CYG_UITRON_PTRS( TASKS )[ tskid - 1 ] = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
383 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
384 ret = E_OBJ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
385 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
386 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
387 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
388 #endif // CYGPKG_UITRON_TASKS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
389
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
390 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
391 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
392 sta_tsk ( ID tskid, INT stacd )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
393 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
394 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
395 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
396 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
397
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
398 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
399 cyg_uint32 state = p->get_state();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
400 #ifdef CYGPKG_UITRON_TASKS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
401 // there is a race condition with deleting the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
402 // so test it now that we have the scheduler locked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
403 if ( p != CYG_UITRON_PTRS( TASKS )[ tskid - 1 ] )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
404 ret = E_NOEXS;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
405 else // NOTE dangling else to the next line:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
406 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
407 if ( state & Cyg_Thread::EXITED ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
408 p->reinitialize();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
409 #ifdef CYGIMP_THREAD_PRIORITY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
410 p->set_priority( CYG_UITRON_TASK_INITIAL_PRIORITY( tskid ) );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
411 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
412 p->set_entry_data( (CYG_ADDRWORD)stacd );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
413 p->force_resume();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
414 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
415 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
416 ret = E_OBJ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
417 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
418 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
419 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
420
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
421 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
422 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
423 ext_tsk ( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
424 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
425 Cyg_Thread::exit();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
426 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
427
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
428 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
429 void
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
430 exd_tsk ( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
431 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
432 #ifdef CYGPKG_UITRON_TASKS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
433 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
434
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
435 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
436 p = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
437 ID tskid = (p - (&cyg_uitron_TASKS[0])) + 1;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
438 // just disconnect the pointer from its object
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
439 CYG_UITRON_PTRS( TASKS )[ tskid - 1 ] = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
440 // Any associated storage management, and possibly calling the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
441 // destructor, is for future versions.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
442 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
443 // do nothing - deletion not supported so just exit...
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
444 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
445 Cyg_Thread::exit();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
446 // does not return, does unlock the scheduler for us
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
447 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
448
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
449 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
450 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
451 ter_tsk ( ID tskid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
452 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
453 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
454 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
455 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
456 CYG_UIT_PARAMCHECK( Cyg_Thread::self() != p, E_OBJ );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
457 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
458 if ( (0 != (Cyg_Thread::EXITED & p->get_state())) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
459 (Cyg_Thread::EXIT == p->get_wake_reason()) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
460 // already dormant
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
461 ret = E_OBJ;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
462 else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
463 p->force_resume(); // let it run
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
464 p->kill(); // and set prio high so it runs RIGHT NOW!!
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
465 #ifdef CYGIMP_THREAD_PRIORITY
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
466 #if CYG_SCHED_UNIQUE_PRIORITIES != 0
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
467 // see if we are already at prio 0:
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
468 if ( 0 == cyg_uitron_dis_dsp_old_priority )
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
469 // then dispatch is enabled, we are not at prio 0
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
470 #endif
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
471 p->set_priority( (cyg_priority) 0 );
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
472 // if we do not do this, then we are not running a strictly
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
473 // uITRON compatible scheduler - so just hope for the best.
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
474 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
475 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
476 Cyg_Scheduler::unlock();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
477 #ifdef CYGIMP_THREAD_PRIORITY
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
478 #if CYG_SCHED_UNIQUE_PRIORITIES == 0
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
479 if ( (E_OK == ret) && (0 != cyg_uitron_dis_dsp_old_priority) ) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
480 // then dispatching is disabled, so our prio is 0 too
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
481 Cyg_Thread::yield(); // so let the dying thread run;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
482 Cyg_Thread::yield(); // no cost here of making sure.
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
483 }
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
484 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
485 #endif
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
486 return ret;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
489 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
490 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
491 dis_dsp ( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
492 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
493 CYG_UITRON_CHECK_TASK_CONTEXT();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
494 CYG_UITRON_CHECK_CPU_UNLOC();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
495 Cyg_Scheduler::lock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
496 // Prevent preemption by going up to prio 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
497 if ( 0 == cyg_uitron_dis_dsp_old_priority ) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
498 #ifdef CYGIMP_THREAD_PRIORITY
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
499 Cyg_Thread *p = Cyg_Thread::self();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
500 cyg_uitron_dis_dsp_old_priority = p->get_priority();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
501 p->set_priority( 0 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
502 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
503 cyg_uitron_dis_dsp_old_priority = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
504 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
505 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
506 Cyg_Scheduler::unlock();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
507 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
508 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
509
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
510 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
511 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
512 ena_dsp ( void )
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 CYG_UITRON_CHECK_TASK_CONTEXT();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
515 CYG_UITRON_CHECK_CPU_UNLOC();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
516 Cyg_Scheduler::lock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
517 // Enable dispatching (if disabled) and maybe switch threads
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
518 if ( 0 != cyg_uitron_dis_dsp_old_priority ) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
519 // We had prevented preemption by going up to prio 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
520 #ifdef CYGIMP_THREAD_PRIORITY
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
521 Cyg_Thread *p = Cyg_Thread::self();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
522 p->set_priority( cyg_uitron_dis_dsp_old_priority );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
523 p->to_queue_head(); // to ensure we continue to run
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
524 // if nobody higher pri
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
525 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
526 cyg_uitron_dis_dsp_old_priority = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
527 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
528 Cyg_Scheduler::unlock();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
529 CYG_UITRON_CHECK_DISPATCH_ENABLED(); // NB: afterwards!
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
530 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
531 }
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
534 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
535 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
536 chg_pri ( ID tskid, PRI tskpri )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
537 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
538 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
539 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
540 if ( 0 == tskid ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
541 p = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
542 CYG_UITRON_CHECK_TASK_CONTEXT_SELF( p );
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 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
545 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
546
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
547 #ifdef CYGIMP_THREAD_PRIORITY
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
548 if ( 0 == tskpri )
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
549 // then use the initial priority [Level X]
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
550 tskpri = CYG_UITRON_TASK_INITIAL_PRIORITY( tskid );
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
551 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
552 CYG_UIT_PARAMCHECK( 0 < tskpri, E_PAR );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
553 #ifdef CYGIMP_THREAD_PRIORITY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
554 #if CYG_THREAD_MAX_PRIORITY < CYG_THREAD_MIN_PRIORITY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
555 CYG_UIT_PARAMCHECK( CYG_THREAD_MAX_PRIORITY <= tskpri &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
556 tskpri <= CYG_THREAD_MIN_PRIORITY, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
557 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
558 CYG_UIT_PARAMCHECK( CYG_THREAD_MAX_PRIORITY >= tskpri &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
559 tskpri >= CYG_THREAD_MIN_PRIORITY, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
560 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
561 // Handle changing our own prio specially, if dispatch disabled:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
562 if ( 0 != cyg_uitron_dis_dsp_old_priority ) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
563 // our actual prio is 0 now and must remain so:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
564 if ( Cyg_Thread::self() == p ) { // by whichever route p was set
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
565 // set the priority we will return to when dispatch is enabled:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
566 cyg_uitron_dis_dsp_old_priority = (cyg_uint32)tskpri;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
567 return E_OK;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
568 }
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
569 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
570 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
571 if ( (p->get_state() & (Cyg_Thread::EXITED | Cyg_Thread::CREATING)) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
572 (Cyg_Thread::EXIT == p->get_wake_reason()) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
573 ret = E_OBJ; // task is dormant
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
574 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
575 p->set_priority( (cyg_priority)tskpri );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
576 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
577 #endif // CYGIMP_THREAD_PRIORITY got priorities at all?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
578 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
579 }
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_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
582 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
583 rot_rdq ( PRI tskpri )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
584 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
585 // zero means our level; easiet way is to yield() the CPU.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
586 if ( 0 == tskpri ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
587 Cyg_Thread::yield();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
588 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
589 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
590 #ifdef CYGIMP_THREAD_PRIORITY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
591 #if CYG_THREAD_MAX_PRIORITY < CYG_THREAD_MIN_PRIORITY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
592 CYG_UIT_PARAMCHECK( CYG_THREAD_MAX_PRIORITY <= tskpri &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
593 tskpri <= CYG_THREAD_MIN_PRIORITY, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
594 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
595 CYG_UIT_PARAMCHECK( CYG_THREAD_MAX_PRIORITY >= tskpri &&
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
596 tskpri >= CYG_THREAD_MIN_PRIORITY, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
597 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
598 Cyg_Thread::rotate_queue( tskpri );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
599 #endif // CYGIMP_THREAD_PRIORITY got priorities at all?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
600 return E_OK;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
603 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
604 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
605 rel_wai ( ID tskid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
606 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
607 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
608 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
609 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
610 CYG_UIT_PARAMCHECK( Cyg_Thread::self() != p, E_OBJ );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
611 Cyg_Scheduler::lock(); // get an atomic view of the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
612 if ( (p->get_state() & (Cyg_Thread::EXITED | Cyg_Thread::CREATING)) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
613 (Cyg_Thread::EXIT == p->get_wake_reason()) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
614 ret = E_OBJ; // task is dormant
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
615 else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
616 p->release();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
617 // return E_OBJ if the thread was not sleeping
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
618 if ( Cyg_Thread::BREAK != p->get_wake_reason() )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
619 ret = E_OBJ;
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 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
622 return ret;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
625 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
626 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
627 get_tid ( ID *p_tskid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
628 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
629 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
630 CYG_UIT_PARAMCHECK_PTR( p_tskid );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
631 if ( (&cyg_uitron_TASKS[0] <= (self)) &&
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
632 ((self) < &cyg_uitron_TASKS[CYGNUM_UITRON_TASKS]) &&
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
633 (0 == Cyg_Scheduler::get_sched_lock()) )
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
634 // then I am a uITRON task and not in an interrupt or DSR
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
635 *p_tskid = (self - (&cyg_uitron_TASKS[0])) + 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
636 else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
637 *p_tskid = 0; // Otherwise, non-task portion
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
638 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
639 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
640
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
641 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
642 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
643 ref_tsk ( T_RTSK *pk_rtsk, ID tskid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
644 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
645 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
646 if ( 0 == tskid ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
647 p = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
648 CYG_UITRON_CHECK_TASK_CONTEXT_SELF( p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
649 tskid = (p - (&cyg_uitron_TASKS[0])) + 1; // it gets used below
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
650 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
651 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
652 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
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 CYG_UIT_PARAMCHECK_PTR( pk_rtsk );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
655 pk_rtsk->exinf = NADR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
656 Cyg_Scheduler::lock(); // get an atomic view of the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
657 cyg_uint32 state = p->get_state();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
658 if ( (state & (Cyg_Thread::EXITED | Cyg_Thread::CREATING)) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
659 (Cyg_Thread::EXIT == p->get_wake_reason()) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
660 pk_rtsk->tskstat = TTS_DMT;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
661 else if ( state == Cyg_Thread::RUNNING )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
662 // If it's us, it's running, else it's ready
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
663 pk_rtsk->tskstat = (Cyg_Thread::self() == p)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
664 ? TTS_RUN // RUN state (we are it)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
665 : TTS_RDY; // READY state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
666 else if ( state & Cyg_Thread::SUSPENDED )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
667 pk_rtsk->tskstat =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
668 (state & (Cyg_Thread::COUNTSLEEP | Cyg_Thread::SLEEPING))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
669 ? TTS_WAS // WAIT-SUSPEND state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
670 : TTS_SUS; // SUSPEND state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
671 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
672 pk_rtsk->tskstat =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
673 (state & (Cyg_Thread::COUNTSLEEP | Cyg_Thread::SLEEPING))
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
674 ? TTS_WAI // WAIT state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
675 : 0; // Not sure what's happening here!
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
676 #ifdef CYGIMP_THREAD_PRIORITY
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
677 if ( TTS_DMT == pk_rtsk->tskstat )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
678 pk_rtsk->tskpri = CYG_UITRON_TASK_INITIAL_PRIORITY( tskid );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
679 else if ( (TTS_RUN == pk_rtsk->tskstat) &&
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
680 (0 != cyg_uitron_dis_dsp_old_priority) )
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
681 // then we are it and dispatching is disabled, so
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
682 // report our "real" priority - it is 0 in the kernel at the moment
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
683 pk_rtsk->tskpri = cyg_uitron_dis_dsp_old_priority;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
684 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
685 pk_rtsk->tskpri = p->get_priority();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
686 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
687 pk_rtsk->tskpri = -1; // Not applicable
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
688 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
689 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
690 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
691 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
692
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
693 // - Task-Dependent Synchronization Functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
694
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
695 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
696 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
697 sus_tsk ( ID tskid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
698 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
699 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
700 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
701 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
702 CYG_UIT_PARAMCHECK( Cyg_Thread::self() != p, E_OBJ );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
703 Cyg_Scheduler::lock(); // get an atomic view of the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
704 if ( (p->get_state() & (Cyg_Thread::EXITED | Cyg_Thread::CREATING)) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
705 (Cyg_Thread::EXIT == p->get_wake_reason()) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
706 ret = E_OBJ; // task is dormant
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
707 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
708 p->suspend();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
709 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
710 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
711 }
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_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
714 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
715 rsm_tsk ( ID tskid )
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 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
718 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
719 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
720 CYG_UIT_PARAMCHECK( Cyg_Thread::self() != p, E_OBJ );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
721 Cyg_Scheduler::lock(); // get an atomic view of the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
722 cyg_uint32 state = p->get_state();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
723 if ( 0 == (Cyg_Thread::SUSPENDED & state) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
724 ret = E_OBJ; // thread is not suspended
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
725 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
726 p->resume();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
727 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
728 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
729 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
730
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
731 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
732 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
733 frsm_tsk ( ID tskid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
734 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
735 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
736 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
737 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
738 CYG_UIT_PARAMCHECK( Cyg_Thread::self() != p, E_OBJ );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
739 Cyg_Scheduler::lock(); // get an atomic view of the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
740 cyg_uint32 state = p->get_state();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
741 if ( 0 == (Cyg_Thread::SUSPENDED & state) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
742 ret = E_OBJ; // thread is not suspended
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
743 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
744 p->force_resume();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
745 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
746 return ret;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
749 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
750 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
751 slp_tsk ( void )
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 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
754 CYG_UITRON_CHECK_TASK_CONTEXT_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
755 CYG_UITRON_CHECK_DISPATCH_ENABLED();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
756 // do this now for the case when no sleeping actually occurs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
757 self->set_wake_reason( Cyg_Thread::DONE );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
758 Cyg_Thread::counted_sleep();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
759 if ( Cyg_Thread::DONE != self->get_wake_reason() )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
760 CYG_UITRON_FAIL_RETURN_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
761 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
762 }
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 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
765 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
766 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
767 tslp_tsk ( TMO tmout )
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 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
770 CYG_UITRON_CHECK_TASK_CONTEXT_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
771 CYG_UIT_PARAMCHECK( -1 <= tmout, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
772 CYG_UITRON_CHECK_DISPATCH_ENABLED();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
773 // do this now for the case when no sleeping actually occurs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
774 self->set_wake_reason( Cyg_Thread::DONE );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
775 // note that TMO_POL is not treated specially, though it
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
776 // happens to work almost as a poll (some sleeping may occur)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
777 if ( TMO_FEVR == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
778 Cyg_Thread::counted_sleep();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
779 else
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
780 Cyg_Thread::counted_sleep(
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
781 (cyg_tick_count)CYG_UITRON_TIME_UIT_TO_SYS32( tmout ) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
782 if ( Cyg_Thread::DONE != self->get_wake_reason() )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
783 CYG_UITRON_FAIL_RETURN_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
784 return E_OK;
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 #endif // CYGFUN_KERNEL_THREADS_TIMER
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_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
789 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
790 wup_tsk ( ID tskid )
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 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
793 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
794 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
795 CYG_UIT_PARAMCHECK( Cyg_Thread::self() != p, E_OBJ );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
796 Cyg_Scheduler::lock(); // get an atomic view of the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
797 if ( (p->get_state() & (Cyg_Thread::EXITED | Cyg_Thread::CREATING)) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
798 (Cyg_Thread::EXIT == p->get_wake_reason()) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
799 ret = E_OBJ; // task is dormant
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
800 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
801 p->counted_wake();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
802 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
803 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
804 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
805
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
806 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
807 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
808 can_wup ( INT *p_wupcnt, ID tskid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
809 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
810 Cyg_Thread *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
811 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
812 if ( 0 == tskid ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
813 p = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
814 CYG_UITRON_CHECK_TASK_CONTEXT_SELF( p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
815 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
816 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
817 CYG_UITRON_CHECK_AND_GETP_TASKS( tskid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
818 CYG_UIT_PARAMCHECK_PTR( p_wupcnt );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
819 Cyg_Scheduler::lock(); // get an atomic view of the task
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
820 if ( (p->get_state() & (Cyg_Thread::EXITED | Cyg_Thread::CREATING)) ||
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
821 (Cyg_Thread::EXIT == p->get_wake_reason()) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
822 ret = E_OBJ; // task is dormant
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
823 else {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
824 cyg_uint32 result = p->cancel_counted_wake();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
825 *p_wupcnt = result;
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_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
828 return ret;
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 // - Synchronization and Communication Functions
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 #ifdef CYGPKG_UITRON_SEMAS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
834 #if 0 < CYG_UITRON_NUM( SEMAS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
835
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
836 #ifdef CYGPKG_UITRON_SEMAS_CREATE_DELETE
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_UITRON_NEWFUNCTION( Cyg_Counting_Semaphore2 )
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_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
841 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
842 cre_sem ( ID semid, T_CSEM *pk_csem )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
843 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
844 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
845 CYG_UIT_PARAMCHECK_PTR( pk_csem );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
846 CYG_UITRON_CHECK_NO_OBJ_LOCK_SCHED( SEMAS, semid );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
847 if ( TA_TFIFO != pk_csem->sematr )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
848 ret = E_RSATR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
849 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
850 CYG_UITRON_PTRS( SEMAS )[ semid - 1 ] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
851 new( &(CYG_UITRON_OBJS( SEMAS )[ semid - 1 ]) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
852 Cyg_Counting_Semaphore2( (cyg_count32)pk_csem->isemcnt );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
853 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
854 return ret;
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 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
858 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
859 del_sem ( ID semid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
860 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
861 Cyg_Counting_Semaphore2 *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
862 CYG_UITRON_CHECK_AND_GETP_SEMAS( semid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
863 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
864 // deal with the race condition here
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
865 if ( p != CYG_UITRON_PTRS( SEMAS )[ semid - 1 ] ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
866 Cyg_Scheduler::unlock();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
867 return E_NOEXS;
0
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 CYG_UITRON_PTRS( SEMAS )[ semid - 1 ] = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
870 p->~Cyg_Counting_Semaphore2();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
871 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
872 return E_OK;
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 #endif // CYGPKG_UITRON_SEMAS_CREATE_DELETE
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 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
877 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
878 sig_sem( ID semid )
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 Cyg_Counting_Semaphore2 *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
881 CYG_UITRON_CHECK_AND_GETP_SEMAS( semid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
882 p->post();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
883 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
884 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
885
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
886 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
887 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
888 wai_sem( ID semid )
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 Cyg_Counting_Semaphore2 *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
891 CYG_UITRON_CHECK_AND_GETP_SEMAS( semid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
892 CYG_UITRON_CHECK_DISPATCH_ENABLED();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
893 cyg_bool result = p->wait();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
894 if ( !result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
895 CYG_UITRON_FAIL_RETURN();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
896 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
897 }
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 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
900 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
901 preq_sem ( ID semid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
902 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
903 Cyg_Counting_Semaphore2 *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
904 CYG_UITRON_CHECK_AND_GETP_SEMAS( semid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
905 cyg_bool result = p->trywait();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
906 if ( !result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
907 return E_TMOUT;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
908 return E_OK;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
911 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
912 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
913 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
914 twai_sem ( ID semid, TMO tmout )
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 Cyg_Counting_Semaphore2 *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
917 CYG_UITRON_CHECK_AND_GETP_SEMAS( semid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
918 CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO( tmout );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
919 // do this now for the case when no sleeping actually occurs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
920 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
921 self->set_wake_reason( Cyg_Thread::TIMEOUT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
922 cyg_bool result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
923 if ( TMO_FEVR == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
924 result = p->wait();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
925 else if ( TMO_POL == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
926 result = p->trywait();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
927 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
928 result = p->wait(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
929 Cyg_Clock::real_time_clock->current_value() +
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
930 (cyg_tick_count)CYG_UITRON_TIME_UIT_TO_SYS32( tmout ) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
931 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
932 CYG_UITRON_FAIL_RETURN_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
933 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
934
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
935 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
936 #endif // CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
937
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
938 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
939 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
940 ref_sem ( T_RSEM *pk_rsem, ID semid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
941 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
942 Cyg_Counting_Semaphore2 *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
943 CYG_UITRON_CHECK_AND_GETP_SEMAS( semid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
944 CYG_UIT_PARAMCHECK_PTR( pk_rsem );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
945 pk_rsem->exinf = NADR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
946 pk_rsem->wtsk = p->waiting();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
947 pk_rsem->semcnt = p->peek();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
948 return E_OK;
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 #endif // 0 < CYG_UITRON_NUM( SEMAS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
952 #endif // CYGPKG_UITRON_SEMAS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
953
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
954 #ifdef CYGPKG_UITRON_FLAGS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
955 #if 0 < CYG_UITRON_NUM( FLAGS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
956
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
957 #ifdef CYGPKG_UITRON_FLAGS_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
958
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
959 CYG_UITRON_NEWFUNCTION( Cyg_Flag )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
960
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
961 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
962 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
963 cre_flg ( ID flgid, T_CFLG *pk_cflg )
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 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
966 CYG_UIT_PARAMCHECK_PTR( pk_cflg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
967 CYG_UITRON_CHECK_NO_OBJ_LOCK_SCHED( FLAGS, flgid );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
968 if ( 0 != ((~(TA_WMUL | TA_WSGL)) & pk_cflg->flgatr) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
969 ret = E_RSATR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
970 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
971 CYG_UITRON_PTRS( FLAGS )[ flgid - 1 ] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
972 new( &(CYG_UITRON_OBJS( FLAGS )[ flgid - 1 ]) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
973 Cyg_Flag( (Cyg_FlagValue) pk_cflg->iflgptn );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
974 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
975 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
976 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
977
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
978 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
979 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
980 del_flg ( ID flgid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
981 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
982 Cyg_Flag *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
983 CYG_UITRON_CHECK_AND_GETP_FLAGS( flgid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
984 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
985 // deal with the race condition here
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
986 if ( p != CYG_UITRON_PTRS( FLAGS )[ flgid - 1 ] ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
987 Cyg_Scheduler::unlock();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
988 return E_NOEXS;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
989 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
990 CYG_UITRON_PTRS( FLAGS )[ flgid - 1 ] = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
991 p->~Cyg_Flag();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
992 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
993 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
994 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
995 #endif // CYGPKG_UITRON_FLAGS_CREATE_DELETE
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 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
998 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
999 set_flg ( ID flgid, UINT setptn )
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 Cyg_Flag *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1002 CYG_UITRON_CHECK_AND_GETP_FLAGS( flgid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1003 p->setbits( setptn );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1004 return E_OK;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1007 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1008 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1009 clr_flg ( ID flgid, UINT clrptn )
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 Cyg_Flag *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1012 CYG_UITRON_CHECK_AND_GETP_FLAGS( flgid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1013 p->maskbits( clrptn );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1014 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1015 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1016
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1017 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1018 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1019 wai_flg ( UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1020 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1021 Cyg_Flag *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1022 CYG_UITRON_CHECK_AND_GETP_FLAGS( flgid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1023 CYG_UIT_PARAMCHECK_PTR( p_flgptn );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1024 CYG_UIT_PARAMCHECK( 0 == (wfmode & ~Cyg_Flag::MASK), E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1025 CYG_UIT_PARAMCHECK( 0 != waiptn, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1026 CYG_UITRON_CHECK_DISPATCH_ENABLED();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1027 // check we can use the wfmode value unchanged
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1028 CYG_ASSERT( Cyg_Flag::AND == TWF_ANDW, "Flag AND value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1029 CYG_ASSERT( Cyg_Flag::OR == TWF_ORW, "Flag OR value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1030 CYG_ASSERT( Cyg_Flag::CLR == TWF_CLR, "Flag CLR value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1031
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1032 UINT result = p->wait( waiptn, wfmode );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1033 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1034 CYG_UITRON_FAIL_RETURN();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1035 *p_flgptn = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1036 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1037 }
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 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1040 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1041 pol_flg ( UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1042 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1043 Cyg_Flag *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1044 CYG_UITRON_CHECK_AND_GETP_FLAGS( flgid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1045 CYG_UIT_PARAMCHECK_PTR( p_flgptn );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1046 CYG_UIT_PARAMCHECK( 0 == (wfmode & ~Cyg_Flag::MASK), E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1047 CYG_UIT_PARAMCHECK( 0 != waiptn, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1048 // check we can use the wfmode value unchanged
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1049 CYG_ASSERT( Cyg_Flag::AND == TWF_ANDW, "Flag AND value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1050 CYG_ASSERT( Cyg_Flag::OR == TWF_ORW, "Flag OR value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1051 CYG_ASSERT( Cyg_Flag::CLR == TWF_CLR, "Flag CLR value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1052
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1053 UINT result = p->poll( waiptn, wfmode );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1054 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1055 return E_TMOUT;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1056 *p_flgptn = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1057 return E_OK;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1060 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1061 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1062 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1063 twai_flg ( UINT *p_flgptn, ID flgid, UINT waiptn, UINT wfmode,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1064 TMO tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1065 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1066 Cyg_Flag *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1067 CYG_UITRON_CHECK_AND_GETP_FLAGS( flgid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1068 CYG_UIT_PARAMCHECK_PTR( p_flgptn );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1069 CYG_UIT_PARAMCHECK( 0 == (wfmode & ~Cyg_Flag::MASK), E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1070 CYG_UIT_PARAMCHECK( 0 != waiptn, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1071 CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO( tmout );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1072 // check we can use the wfmode value unchanged
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1073 CYG_ASSERT( Cyg_Flag::AND == TWF_ANDW, "Flag AND value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1074 CYG_ASSERT( Cyg_Flag::OR == TWF_ORW, "Flag OR value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1075 CYG_ASSERT( Cyg_Flag::CLR == TWF_CLR, "Flag CLR value bad" );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1076
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1077 // do this now for the case when no sleeping actually occurs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1078 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1079 self->set_wake_reason( Cyg_Thread::TIMEOUT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1080 UINT result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1081 if ( TMO_FEVR == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1082 result = p->wait( waiptn, wfmode );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1083 else if ( TMO_POL == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1084 result = p->poll( waiptn, wfmode );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1085 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1086 result = p->wait( waiptn, wfmode,
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1087 Cyg_Clock::real_time_clock->current_value() +
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1088 (cyg_tick_count)CYG_UITRON_TIME_UIT_TO_SYS32( tmout ) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1089 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1090 CYG_UITRON_FAIL_RETURN_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1091 *p_flgptn = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1092 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1093 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1094 #endif // CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1095
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1096 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1097 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1098 ref_flg ( T_RFLG *pk_rflg, ID flgid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1099 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1100 Cyg_Flag *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1101 CYG_UITRON_CHECK_AND_GETP_FLAGS( flgid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1102 CYG_UIT_PARAMCHECK_PTR( pk_rflg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1103 pk_rflg->exinf = NADR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1104 pk_rflg->wtsk = p->waiting();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1105 pk_rflg->flgptn = p->peek();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1106 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1107 }
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 #endif // 0 < CYG_UITRON_NUM( FLAGS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1110 #endif // CYGPKG_UITRON_FLAGS
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 #ifdef CYGPKG_UITRON_MBOXES
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1113 #if 0 < CYG_UITRON_NUM( MBOXES )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1114
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1115 #ifdef CYGPKG_UITRON_MBOXES_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1116 CYG_UITRON_NEWFUNCTION( Cyg_Mbox )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1117
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1118 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1119 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1120 cre_mbx ( ID mbxid, T_CMBX* pk_cmbx )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1121 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1122 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1123 CYG_UIT_PARAMCHECK_PTR( pk_cmbx );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1124 CYG_UITRON_CHECK_NO_OBJ_LOCK_SCHED( MBOXES, mbxid );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1125 if ( ((ATR)(TA_TFIFO + TA_MFIFO)) != pk_cmbx->mbxatr )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1126 ret = E_RSATR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1127 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1128 CYG_UITRON_PTRS( MBOXES )[ mbxid - 1 ] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1129 new( &(CYG_UITRON_OBJS( MBOXES )[ mbxid - 1 ]) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1130 Cyg_Mbox();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1131 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1132 return ret;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1135 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1136 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1137 del_mbx ( ID mbxid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1138 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1139 Cyg_Mbox *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1140 CYG_UITRON_CHECK_AND_GETP_MBOXES( mbxid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1141 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1142 // deal with the race condition here
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1143 if ( p != CYG_UITRON_PTRS( MBOXES )[ mbxid - 1 ] ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1144 Cyg_Scheduler::unlock();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1145 return E_NOEXS;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1146 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1147 CYG_UITRON_PTRS( MBOXES )[ mbxid - 1 ] = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1148 p->~Cyg_Mbox();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1149 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1150 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1151 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1152 #endif // CYGPKG_UITRON_MBOXES_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1153
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1154 // This bit of unpleasantness is to allow uITRON programs to send a NULL
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1155 // message - if permitted by the parameter checking.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1156 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1157 // NULL is used internally to mean no message; but -1 is fine. So we send
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1158 // a NULL as a NADR and if we see a NULL coming back, change it to a NADR.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1159 //
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1160 // One hopes that often this will be optimized out, since the one or both
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1161 // of these being true has been detected and errored out just above.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1162
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1163 #ifdef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1164 // represent a NULL as NADR internally
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1165 #define CYG_UIT_TMSG_FIXUP_IN( _p_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1166 if ( NULL == (_p_) ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1167 (_p_) = (T_MSG *)NADR; \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1168 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1169
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1170 // we get a NADR back sometimes, meaning NULL
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1171 #define CYG_UIT_TMSG_FIXUP_OUT( _p_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1172 if ( NADR == (_p_) ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1173 (_p_) = (T_MSG *)NULL; \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1174 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1175
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1176 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1177 // NULL is checked for and makes an error
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1178 #define CYG_UIT_TMSG_FIXUP_IN( _p_ ) CYG_EMPTY_STATEMENT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1179 #define CYG_UIT_TMSG_FIXUP_OUT( _p_ ) CYG_EMPTY_STATEMENT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1180 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1181
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1182 // and sometimes either in status enquiries
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1183 #define CYG_UIT_TMSG_FIXUP_ALL( _p_ ) CYG_MACRO_START \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1184 if ( NULL == (_p_) ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1185 (_p_) = (T_MSG *)NADR; \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1186 else if ( NADR == (_p_) ) \
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1187 (_p_) = (T_MSG *)NULL; \
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1188 CYG_MACRO_END
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1189
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1190 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1191 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1192 snd_msg ( ID mbxid, T_MSG *pk_msg )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1193 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1194 Cyg_Mbox *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1195 CYG_UITRON_CHECK_AND_GETP_MBOXES( mbxid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1196 CYG_UIT_PARAMCHECK_PTR( pk_msg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1197 CYG_UIT_TMSG_FIXUP_IN( pk_msg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1198 cyg_bool result = p->tryput( (void *)pk_msg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1199 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1200 return E_QOVR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1201 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1202 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1203
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 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1206 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1207 rcv_msg ( T_MSG **ppk_msg, ID mbxid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1208 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1209 Cyg_Mbox *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1210 CYG_UITRON_CHECK_AND_GETP_MBOXES( mbxid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1211 CYG_UIT_PARAMCHECK_PTR( ppk_msg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1212 CYG_UITRON_CHECK_DISPATCH_ENABLED();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1213 T_MSG *result = (T_MSG *)p->get();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1214 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1215 CYG_UITRON_FAIL_RETURN();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1216 CYG_UIT_TMSG_FIXUP_OUT( result );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1217 *ppk_msg = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1218 return E_OK;
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1221 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1222 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1223 prcv_msg ( T_MSG **ppk_msg, ID mbxid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1224 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1225 Cyg_Mbox *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1226 CYG_UITRON_CHECK_AND_GETP_MBOXES( mbxid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1227 CYG_UIT_PARAMCHECK_PTR( ppk_msg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1228 T_MSG *result = (T_MSG *)p->tryget();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1229 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1230 return E_TMOUT;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1231 CYG_UIT_TMSG_FIXUP_OUT( result );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1232 *ppk_msg = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1233 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1234 }
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 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1237 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1238 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1239 trcv_msg ( T_MSG **ppk_msg, ID mbxid, TMO tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1240 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1241 Cyg_Mbox *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1242 CYG_UITRON_CHECK_AND_GETP_MBOXES( mbxid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1243 CYG_UIT_PARAMCHECK_PTR( ppk_msg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1244 CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO( tmout );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1245 // do this now for the case when no sleeping actually occurs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1246 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1247 self->set_wake_reason( Cyg_Thread::TIMEOUT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1248 T_MSG *result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1249 if ( TMO_FEVR == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1250 result = (T_MSG *)p->get();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1251 else if ( TMO_POL == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1252 result = (T_MSG *)p->tryget();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1253 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1254 result = (T_MSG *)p->get(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1255 Cyg_Clock::real_time_clock->current_value() +
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1256 (cyg_tick_count)CYG_UITRON_TIME_UIT_TO_SYS32( tmout ) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1257 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1258 CYG_UITRON_FAIL_RETURN_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1259 CYG_UIT_TMSG_FIXUP_OUT( result );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1260 *ppk_msg = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1261 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1262 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1263 #endif // CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1264
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1265 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1266 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1267 ref_mbx ( T_RMBX *pk_rmbx, ID mbxid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1268 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1269 Cyg_Mbox *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1270 CYG_UITRON_CHECK_AND_GETP_MBOXES( mbxid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1271 CYG_UIT_PARAMCHECK_PTR( pk_rmbx );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1272 pk_rmbx->exinf = NADR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1273 pk_rmbx->wtsk = p->waiting_to_get();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1274 pk_rmbx->pk_msg = (T_MSG *)p->peek_item();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1275 CYG_UIT_TMSG_FIXUP_ALL( pk_rmbx->pk_msg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1276 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1277 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1278
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1279 #undef CYG_UIT_TMSG_FIXUP_IN
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1280 #undef CYG_UIT_TMSG_FIXUP_OUT
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1281 #undef CYG_UIT_TMSG_FIXUP_ALL
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1282
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1283 #endif // 0 < CYG_UITRON_NUM( MBOXES )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1284 #endif // CYGPKG_UITRON_MBOXES
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1285
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1286 // - Extended Synchronization and Communication Functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1287
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1288 #if 0 // NOT SUPPORTED
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1289 ER cre_mbf ( ID mbfid, T_CMBF *pk_cmbf );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1290 ER del_mbf ( ID mbfid );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1291 ER snd_mbf ( ID mbfid, VP msg, INT msgsz );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1292 ER psnd_mbf ( ID mbfid, VP msg, INT msgsz );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1293 ER tsnd_mbf ( ID mbfid, VP msg, INT msgsz, TMO tmout );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1294 ER rcv_mbf ( VP msg, INT *p_msgsz, ID mbfid );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1295 ER prcv_mbf ( VP msg, INT *p_msgsz, ID mbfid );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1296 ER trcv_mbf ( VP msg, INT *p_msgsz, ID mbfid, TMO tmout );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1297 ER ref_mbf ( T_RMBF *pk_rmbf, ID mbfid );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1298 ER cre_por ( ID porid, T_CPOR *pk_cpor );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1299 ER del_por ( ID porid );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1300 ER cal_por ( VP msg, INT *p_rmsgsz, ID porid, UINT calptn, INT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1301 cmsgsz );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1302 ER pcal_por ( VP msg, INT *p_rmsgsz, ID porid, UINT calptn, INT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1303 cmsgsz );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1304 ER tcal_por ( VP msg, INT *p_rmsgsz, ID porid, UINT calptn, INT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1305 cmsgsz, TMO tmout );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1306 ER acp_por ( RNO *p_rdvno, VP msg, INT *p_cmsgsz, ID porid, UINT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1307 acpptn );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1308 ER pacp_por ( RNO *p_rdvno, VP msg, INT *p_cmsgsz, ID porid, UINT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1309 acpptn );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1310 ER tacp_por ( RNO *p_rdvno, VP msg, INT *p_cmsgsz, ID porid, UINT
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1311 acpptn, TMO tmout );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1312 ER fwd_por ( ID porid, UINT calptn, RNO rdvno, VP msg, INT cmsgsz
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1313 );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1314 ER rpl_rdv ( RNO rdvno, VP msg, INT rmsgsz );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1315 ER ref_por ( T_RPOR *pk_rpor, ID porid );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1316 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1317
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1318 // - Interrupt Management Functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1319
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1320 #if 0 // NOT SUPPORTED
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1321 ER def_int ( UINT dintno, T_DINT *pk_dint );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1322 void ret_wup ( ID tskid );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1323 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1324
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1325 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1326 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1327 loc_cpu ( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1328 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1329 CYG_UITRON_CHECK_TASK_CONTEXT();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1330 Cyg_Scheduler::lock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1331 // Prevent preemption by going up to prio 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1332 if ( 0 == cyg_uitron_dis_dsp_old_priority ) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1333 #ifdef CYGIMP_THREAD_PRIORITY
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1334 Cyg_Thread *p = Cyg_Thread::self();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1335 cyg_uitron_dis_dsp_old_priority = p->get_priority();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1336 p->set_priority( 0 );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1337 #else
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1338 cyg_uitron_dis_dsp_old_priority = 1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1339 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1340 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1341 Cyg_Interrupt::disable_interrupts();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1342 Cyg_Scheduler::unlock();
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1343 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1344 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1345
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1346 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1347 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1348 unl_cpu ( void )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1349 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1350 CYG_UITRON_CHECK_TASK_CONTEXT();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1351 Cyg_Scheduler::lock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1352 // Enable dispatching (if disabled) and maybe switch threads
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1353 if ( 0 != cyg_uitron_dis_dsp_old_priority ) {
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1354 // We had prevented preemption by going up to prio 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1355 #ifdef CYGIMP_THREAD_PRIORITY
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1356 Cyg_Thread *p = Cyg_Thread::self();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1357 p->set_priority( cyg_uitron_dis_dsp_old_priority );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1358 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1359 cyg_uitron_dis_dsp_old_priority = 0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1360 }
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1361 Cyg_Interrupt::enable_interrupts();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1362 Cyg_Scheduler::unlock();
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1363 CYG_UITRON_CHECK_DISPATCH_ENABLED(); // NB: afterwards!
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1364 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1365 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1366
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1367 CYG_UIT_FUNC_INLINE
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1368 ER
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1369 dis_int ( UINT eintno )
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1370 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1371 #if 0 < CYGNUM_HAL_ISR_MIN
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1372 CYG_UIT_PARAMCHECK( CYGNUM_HAL_ISR_MIN <= eintno, E_PAR );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1373 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1374 CYG_UIT_PARAMCHECK( CYGNUM_HAL_ISR_MAX >= eintno, E_PAR );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1375 HAL_INTERRUPT_MASK( eintno );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1376 return E_OK;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1377 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1378
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1379 CYG_UIT_FUNC_INLINE
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1380 ER
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1381 ena_int ( UINT eintno )
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1382 {
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1383 #if 0 < CYGNUM_HAL_ISR_MIN
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1384 CYG_UIT_PARAMCHECK( CYGNUM_HAL_ISR_MIN <= eintno, E_PAR );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1385 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1386 CYG_UIT_PARAMCHECK( CYGNUM_HAL_ISR_MAX >= eintno, E_PAR );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1387 HAL_INTERRUPT_UNMASK( eintno );
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1388 return E_OK;
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1389 }
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
1390
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1391 #if 0 // NOT SUPPORTED
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1392 ER chg_iXX ( UINT iXXXX );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1393 ER ref_iXX ( UINT *p_iXXXX );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1394 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1395
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1396 // - Memorypool Management Functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1397 #ifdef CYGPKG_UITRON_MEMPOOLVAR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1398 #if 0 < CYG_UITRON_NUM( MEMPOOLVAR )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1399
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1400 #ifdef CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1401
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1402 CYG_UITRON_NEWFUNCTION( Cyg_Mempool_Variable )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1403
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1404 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1405 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1406 cre_mpl ( ID mplid, T_CMPL *pk_cmpl )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1407 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1408 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1409 CYG_UIT_PARAMCHECK_PTR( pk_cmpl );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1410 CYG_UITRON_CHECK_NO_OBJ_LOCK_SCHED( MEMPOOLVAR, mplid );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1411 Cyg_Mempool_Variable *p = &(CYG_UITRON_OBJS( MEMPOOLVAR )[ mplid - 1 ]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1412 cyg_uint8 *base;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1413 cyg_int32 size;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1414 CYG_ADDRWORD scratch;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1415 // preserve the original memory area to use
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1416 p->get_arena( base, size, scratch );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1417
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1418 if ( size < pk_cmpl->mplsz )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1419 ret = E_NOMEM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1420 else if ( TA_TFIFO != pk_cmpl->mplatr )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1421 ret = E_RSATR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1422 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1423 CYG_UITRON_PTRS( MEMPOOLVAR )[ mplid - 1 ] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1424 new( p ) Cyg_Mempool_Variable( base, size );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1425 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1426 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1427 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1428
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1429 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1430 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1431 del_mpl ( ID mplid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1432 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1433 Cyg_Mempool_Variable *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1434 CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1435 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1436 // deal with the race condition here
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1437 if ( p != CYG_UITRON_PTRS( MEMPOOLVAR )[ mplid - 1 ] ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1438 Cyg_Scheduler::unlock();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1439 return E_NOEXS;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1440 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1441 CYG_UITRON_PTRS( MEMPOOLVAR )[ mplid - 1 ] = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1442 p->~Cyg_Mempool_Variable();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1443 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1444 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1445 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1446 #endif // CYGPKG_UITRON_MEMPOOLVAR_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1447
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1448 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1449 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1450 get_blk ( VP *p_blk, ID mplid, INT blksz )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1451 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1452 Cyg_Mempool_Variable *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1453 CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1454 CYG_UIT_PARAMCHECK_PTR( p_blk );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1455 CYG_UIT_PARAMCHECK( blksz > 0, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1456 CYG_UITRON_CHECK_DISPATCH_ENABLED();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1457 VP result = (VP)p->alloc(blksz);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1458 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1459 CYG_UITRON_FAIL_RETURN();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1460 *p_blk = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1461 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1462 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1463
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1464
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1465 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1466 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1467 pget_blk ( VP *p_blk, ID mplid, INT blksz )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1468 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1469 Cyg_Mempool_Variable *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1470 CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1471 CYG_UIT_PARAMCHECK_PTR( p_blk );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1472 CYG_UIT_PARAMCHECK( blksz > 0, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1473 VP result = (VP)p->try_alloc(blksz);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1474 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1475 return E_TMOUT;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1476 *p_blk = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1477 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1478 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1479
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1480 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1481 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1482 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1483 tget_blk ( VP *p_blk, ID mplid, INT blksz, TMO tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1484 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1485 Cyg_Mempool_Variable *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1486 CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1487 CYG_UIT_PARAMCHECK_PTR( p_blk );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1488 CYG_UIT_PARAMCHECK( blksz > 0, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1489 CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO( tmout );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1490 // do this now for the case when no sleeping actually occurs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1491 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1492 self->set_wake_reason( Cyg_Thread::TIMEOUT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1493 VP result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1494 if ( TMO_FEVR == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1495 result = p->alloc(blksz);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1496 else if ( TMO_POL == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1497 result = p->try_alloc(blksz);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1498 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1499 result = p->alloc( blksz,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1500 Cyg_Clock::real_time_clock->current_value() +
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1501 (cyg_tick_count)CYG_UITRON_TIME_UIT_TO_SYS32( tmout ) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1502 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1503 CYG_UITRON_FAIL_RETURN_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1504 *p_blk = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1505 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1506 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1507 #endif // CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1508
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1509 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1510 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1511 rel_blk ( ID mplid, VP blk )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1512 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1513 Cyg_Mempool_Variable *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1514 CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1515 CYG_UIT_PARAMCHECK_PTR( blk );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1516 cyg_bool result = p->free( (cyg_uint8 *)blk, 0 );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1517 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1518 return E_PAR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1519 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1520 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1521
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1522 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1523 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1524 ref_mpl ( T_RMPL *pk_rmpl, ID mplid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1525 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1526 Cyg_Mempool_Variable *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1527 CYG_UITRON_CHECK_AND_GETP_MEMPOOLVAR( mplid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1528 CYG_UIT_PARAMCHECK_PTR( pk_rmpl );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1529 pk_rmpl->exinf = NADR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1530 pk_rmpl->wtsk = p->waiting();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1531 pk_rmpl->frsz = p->get_freemem();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1532
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1533 cyg_uint8 *base;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1534 cyg_int32 size;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1535 CYG_ADDRWORD maxfree;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1536 p->get_arena(base, size, maxfree);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1537 pk_rmpl->maxsz = maxfree;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1538
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1539 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1540 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1541
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1542 #endif // 0 < CYG_UITRON_NUM( MEMPOOLVAR )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1543 #endif // CYGPKG_UITRON_MEMPOOLVAR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1544
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1545 #ifdef CYGPKG_UITRON_MEMPOOLFIXED
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1546 #if 0 < CYG_UITRON_NUM( MEMPOOLFIXED )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1547
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1548 #ifdef CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1549
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1550 CYG_UITRON_NEWFUNCTION( Cyg_Mempool_Fixed )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1551
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1552 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1553 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1554 cre_mpf ( ID mpfid, T_CMPF *pk_cmpf )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1555 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1556 ER ret = E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1557 CYG_UIT_PARAMCHECK_PTR( pk_cmpf );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1558 CYG_UITRON_CHECK_NO_OBJ_LOCK_SCHED( MEMPOOLFIXED, mpfid );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1559 Cyg_Mempool_Fixed *p = &(CYG_UITRON_OBJS( MEMPOOLFIXED )[ mpfid - 1 ]);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1560 cyg_uint8 *base;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1561 cyg_int32 size;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1562 CYG_ADDRWORD scratch;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1563 // preserve the original memory area to use
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1564 p->get_arena( base, size, scratch );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1565
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1566 if ( size < (pk_cmpf->blfsz * (pk_cmpf->mpfcnt + 1)) )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1567 ret = E_NOMEM;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1568 else if ( TA_TFIFO != pk_cmpf->mpfatr )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1569 ret = E_RSATR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1570 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1571 CYG_UITRON_PTRS( MEMPOOLFIXED )[ mpfid - 1 ] =
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1572 new( p )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1573 Cyg_Mempool_Fixed( base, size,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1574 (CYG_ADDRWORD)pk_cmpf->blfsz );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1575 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1576 return ret;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1577 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1578
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1579 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1580 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1581 del_mpf ( ID mpfid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1582 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1583 Cyg_Mempool_Fixed *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1584 CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1585 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1586 // deal with the race condition here
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1587 if ( p != CYG_UITRON_PTRS( MEMPOOLFIXED )[ mpfid - 1 ] ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1588 Cyg_Scheduler::unlock();
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1589 return E_NOEXS;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1590 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1591 CYG_UITRON_PTRS( MEMPOOLFIXED )[ mpfid - 1 ] = NULL;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1592 p->~Cyg_Mempool_Fixed();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1593 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1594 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1595 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1596 #endif // CYGPKG_UITRON_MEMPOOLFIXED_CREATE_DELETE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1597
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1598 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1599 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1600 get_blf ( VP *p_blf, ID mpfid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1601 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1602 Cyg_Mempool_Fixed *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1603 CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1604 CYG_UIT_PARAMCHECK_PTR( p_blf );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1605 CYG_UITRON_CHECK_DISPATCH_ENABLED();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1606 VP result = (VP)p->alloc();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1607 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1608 CYG_UITRON_FAIL_RETURN();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1609 *p_blf = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1610 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1611 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1612
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1613 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1614 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1615 pget_blf ( VP *p_blf, ID mpfid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1616 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1617 Cyg_Mempool_Fixed *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1618 CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1619 CYG_UIT_PARAMCHECK_PTR( p_blf );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1620 VP result = (VP)p->try_alloc();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1621 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1622 return E_TMOUT;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1623 *p_blf = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1624 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1625 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1626
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1627 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1628 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1629 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1630 tget_blf ( VP *p_blf, ID mpfid, TMO tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1631 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1632 Cyg_Mempool_Fixed *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1633 CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1634 CYG_UIT_PARAMCHECK_PTR( p_blf );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1635 CYG_UITRON_CHECK_DISPATCH_ENABLED_TMO( tmout );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1636 // do this now for the case when no sleeping actually occurs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1637 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1638 self->set_wake_reason( Cyg_Thread::TIMEOUT );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1639 VP result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1640 if ( TMO_FEVR == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1641 result = p->alloc();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1642 else if ( TMO_POL == tmout )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1643 result = p->try_alloc();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1644 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1645 result = p->alloc(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1646 Cyg_Clock::real_time_clock->current_value() +
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1647 (cyg_tick_count)CYG_UITRON_TIME_UIT_TO_SYS32( tmout ) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1648 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1649 CYG_UITRON_FAIL_RETURN_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1650 *p_blf = result;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1651 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1652 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1653 #endif // CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1654
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1655 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1656 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1657 rel_blf ( ID mpfid, VP blf )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1658 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1659 Cyg_Mempool_Fixed *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1660 CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1661 CYG_UIT_PARAMCHECK_PTR( blf );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1662 cyg_bool result = p->free( (cyg_uint8 *)blf );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1663 if ( ! result )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1664 return E_PAR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1665 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1666 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1667
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1668 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1669 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1670 ref_mpf ( T_RMPF *pk_rmpf, ID mpfid )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1671 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1672 Cyg_Mempool_Fixed *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1673 CYG_UITRON_CHECK_AND_GETP_MEMPOOLFIXED( mpfid, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1674 CYG_UIT_PARAMCHECK_PTR( pk_rmpf );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1675 pk_rmpf->exinf = NADR;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1676 pk_rmpf->wtsk = p->waiting();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1677
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1678 cyg_int32 blocksize = p->get_blocksize();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1679 pk_rmpf->frbcnt = p->get_freemem() / blocksize;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1680 // these two are "implementation dependent" ie. eCos only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1681 pk_rmpf->numbcnt = p->get_totalmem() / blocksize;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1682 pk_rmpf->bsize = blocksize;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1683
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1684 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1685 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1686
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1687 #endif // 0 < CYG_UITRON_NUM( MEMPOOLFIXED )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1688 #endif // CYGPKG_UITRON_MEMPOOLFIXED
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1689
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1690 // - Time Management Functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1691
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1692 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1693 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1694 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1695 set_tim ( SYSTIME *pk_tim )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1696 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1697 CYG_UIT_PARAMCHECK_PTR( pk_tim );
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1698 Cyg_Clock::real_time_clock->set_value(
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1699 CYG_UITRON_TIME_UIT_TO_SYS64( *pk_tim ) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1700 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1701 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1702
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1703 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1704 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1705 get_tim ( SYSTIME *pk_tim )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1706 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1707 CYG_UIT_PARAMCHECK_PTR( pk_tim );
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1708 *pk_tim = CYG_UITRON_TIME_SYS_TO_UIT64(
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1709 Cyg_Clock::real_time_clock->current_value() );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1710 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1711 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1712 #endif // CYGVAR_KERNEL_COUNTERS_CLOCK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1713
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1714
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1715 #ifdef CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1716 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1717 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1718 dly_tsk ( DLYTIME dlytim )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1719 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1720 CYG_UIT_PARAMCHECK( 0 <= dlytim, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1721 CYG_UITRON_CHECK_DISPATCH_ENABLED();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1722 if ( 0 >= dlytim )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1723 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1724 Cyg_Thread *self = Cyg_Thread::self();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1725 CYG_UITRON_CHECK_TASK_CONTEXT_SELF( self );
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1726 self->delay( CYG_UITRON_TIME_UIT_TO_SYS64( dlytim ) );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1727 if ( Cyg_Thread::DONE != self->get_wake_reason() )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1728 CYG_UITRON_FAIL_RETURN_SELF( self );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1729 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1730 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1731 #endif // CYGFUN_KERNEL_THREADS_TIMER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1732
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1733 #ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1734 #ifdef CYGPKG_UITRON_CYCLICS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1735 #if 0 < CYG_UITRON_NUM( CYCLICS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1736 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1737 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1738 def_cyc ( HNO cycno, T_DCYC *pk_dcyc )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1739 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1740 // pk_dcyc->cycatr is ignored
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1741 // The only relevant attribute is TA_HLNG/TA_ASM.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1742 // This can be ignored as assembler routines are defined to be
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1743 // more conservative with registers than the procedure call standard.
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1744 cyg_tick_count t;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1745 Cyg_Timer *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1746 CYG_UITRON_CHECK_AND_GETHDLR( CYCLICS, cycno, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1747 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1748 CYG_UIT_PARAMCHECK( NULL != pk_dcyc, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1749 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1750 if( NADR == pk_dcyc ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1751 p->~Cyg_Timer();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1752 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1753 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1754 CYG_UIT_PARAMCHECK( 0 == (pk_dcyc->cycact & ~TCY_ON), E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1755 CYG_UIT_PARAMCHECK( 0 < pk_dcyc->cyctim, E_PAR );
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1756 t = CYG_UITRON_TIME_UIT_TO_SYS64( pk_dcyc->cyctim );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1757 p->initialize(
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1758 Cyg_Clock::real_time_clock,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1759 (cyg_alarm_fn *)pk_dcyc->cychdr,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1760 (CYG_ADDRWORD)pk_dcyc->exinf,
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1761 Cyg_Clock::real_time_clock->current_value() + t,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1762 t,
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1763 pk_dcyc->cycact);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1764 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1765 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1766
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1767 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1768 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1769 act_cyc ( HNO cycno, UINT cycact )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1770 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1771 Cyg_Timer *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1772 CYG_UITRON_CHECK_AND_GETHDLR( CYCLICS, cycno, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1773 CYG_UIT_PARAMCHECK( p->is_initialized(), E_NOEXS);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1774 CYG_UIT_PARAMCHECK( 0 == (cycact & ~(TCY_ON | TCY_INI)), E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1775 p->activate(cycact);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1776 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1777 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1778
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1779
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1780 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1781 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1782 ref_cyc ( T_RCYC *pk_rcyc, HNO cycno )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1783 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1784 Cyg_Timer *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1785 cyg_tick_count t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1786 CYG_UITRON_CHECK_AND_GETHDLR( CYCLICS, cycno, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1787 CYG_UIT_PARAMCHECK( p->is_initialized(), E_NOEXS);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1788 CYG_UIT_PARAMCHECK_PTR( pk_rcyc );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1789
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1790 pk_rcyc->exinf = (VP)p->get_data();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1791 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1792 t = p->get_trigger() - Cyg_Clock::real_time_clock->current_value();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1793 Cyg_Scheduler::unlock();
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1794 pk_rcyc->lfttim = CYG_UITRON_TIME_SYS_TO_UIT64( t );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1795 pk_rcyc->cycact = (UINT)p->is_enabled();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1796 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1797 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1798 #endif // 0 < CYG_UITRON_NUM( CYCLICS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1799 #endif // CYGPKG_UITRON_CYCLICS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1800
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1801 #ifdef CYGPKG_UITRON_ALARMS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1802 #if 0 < CYG_UITRON_NUM( ALARMS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1803 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1804 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1805 def_alm ( HNO almno, T_DALM *pk_dalm )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1806 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1807 Cyg_Timer *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1808 cyg_tick_count t, now;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1809 CYG_UITRON_CHECK_AND_GETHDLR( ALARMS, almno, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1810 #ifndef CYGSEM_UITRON_PARAMS_NULL_IS_GOOD_PTR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1811 CYG_UIT_PARAMCHECK( NULL != pk_dalm, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1812 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1813 if( NADR == pk_dalm ) {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1814 p->~Cyg_Timer();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1815 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1816 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1817
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1818 CYG_UIT_PARAMCHECK( 0 == (pk_dalm->tmmode & ~TTM_REL), E_PAR );
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1819 CYG_UIT_PARAMCHECK( 0 < pk_dalm->almtim, E_PAR );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1820
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1821 // make the time arithmetic safe without locking
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1822 now = Cyg_Clock::real_time_clock->current_value();
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1823 t = CYG_UITRON_TIME_UIT_TO_SYS64( pk_dalm->almtim );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1824 if( TTM_REL & pk_dalm->tmmode )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1825 t += now;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1826
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1827 CYG_UIT_PARAMCHECK( now < t, E_PAR );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1828
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1829 p->initialize(Cyg_Clock::real_time_clock,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1830 (cyg_alarm_fn *)pk_dalm->almhdr,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1831 (CYG_ADDRWORD)pk_dalm->exinf,
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1832 t, 0, Cyg_Timer::ENABLE);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1833
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1834 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1835 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1836
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1837 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1838 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1839 ref_alm ( T_RALM *pk_ralm, HNO almno )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1840 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1841 Cyg_Timer *p;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1842 cyg_tick_count t;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1843
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1844 CYG_UITRON_CHECK_AND_GETHDLR( ALARMS, almno, p );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1845 CYG_UIT_PARAMCHECK_PTR( pk_ralm );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1846 CYG_UIT_PARAMCHECK( p->is_initialized(), E_NOEXS);
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1847
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1848 Cyg_Scheduler::lock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1849 t = p->get_trigger() - Cyg_Clock::real_time_clock->current_value();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1850 Cyg_Scheduler::unlock();
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1851 pk_ralm->exinf = (VP)p->get_data();
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 8
diff changeset
1852 pk_ralm->lfttim = CYG_UITRON_TIME_SYS_TO_UIT64( t );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1853 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1854 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1855 #endif // 0 < CYG_UITRON_NUM( ALARMS )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1856 #endif // CYGPKG_UITRON_ALARMS
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1857
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1858 #endif // CYGVAR_KERNEL_COUNTERS_CLOCK
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1859
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1860 // - System Management Functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1861
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1862 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1863 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1864 get_ver ( T_VER *pk_ver )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1865 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1866 CYG_UIT_PARAMCHECK_PTR( pk_ver );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1867
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1868 pk_ver->maker = CYGNUM_UITRON_VER_MAKER;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1869 pk_ver->id = CYGNUM_UITRON_VER_ID;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1870 pk_ver->spver = CYGNUM_UITRON_VER_SPVER;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1871 pk_ver->prver = CYGNUM_UITRON_VER_PRVER;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1872 pk_ver->prno[0] = CYGNUM_UITRON_VER_PRNO_0;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1873 pk_ver->prno[1] = CYGNUM_UITRON_VER_PRNO_1;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1874 pk_ver->prno[2] = CYGNUM_UITRON_VER_PRNO_2;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1875 pk_ver->prno[3] = CYGNUM_UITRON_VER_PRNO_3;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1876 pk_ver->cpu = CYGNUM_UITRON_VER_CPU;
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1877 pk_ver->var = CYGNUM_UITRON_VER_VAR;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1878
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1879 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1880 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1881
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1882 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1883 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1884 ref_sys ( T_RSYS *pk_rsys )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1885 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1886 CYG_UIT_PARAMCHECK_PTR( pk_rsys );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1887 if ( ! Cyg_Interrupt::interrupts_enabled() )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1888 // CPU is locked
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1889 pk_rsys->sysstat = TSS_LOC;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1890 else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1891 pk_rsys->sysstat =
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1892 (0 == cyg_uitron_dis_dsp_old_priority) ? TSS_TSK : TSS_DDSP;
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1893 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1894 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1895
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1896 CYG_UIT_FUNC_INLINE
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1897 ER
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1898 ref_cfg ( T_RCFG *pk_rcfg )
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1899 {
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1900 CYG_UIT_PARAMCHECK_PTR( pk_rcfg );
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1901 // no details here yet
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1902 return E_OK;
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1903 }
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1904
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1905 #if 0 // NOT SUPPORTED
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1906 ER def_svc ( FN s_fncd, T_DSVC *pk_dsvc );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1907 ER def_exc ( UINT exckind, T_DEXC *pk_dexc );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1908 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1909
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1910 // - Network Support Functions
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1911
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1912 #if 0 // NOT SUPPORTED
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1913 ER nrea_dat ( INT *p_reasz, VP dstadr, NODE srcnode, VP srcadr,
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1914 INT datsz );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1915 ER nwri_dat ( INT *p_wrisz, NODE dstnode, VP dstadr, VP srcadr,
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1916 INT datsz );
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1917 ER nget_nod ( NODE *p_node );
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
1918 ER nget_ver ( T_VER *pk_ver, NODE node );
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1919 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1920
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1921 // ========================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1922
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1923 #endif // CYGPKG_UITRON
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1924
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1925 #endif // CYGPRI_UITRON_FUNCS_HERE_AND_NOW
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1926
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1927 #endif // CYGONCE_COMPAT_UITRON_UIT_FUNC_INL
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1928 //EOF uit_func.inl