annotate packages/compat/uitron/current/include/uit_func.inl @ 1777:c16341b1bac6 default tip

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