annotate packages/compat/uitron/current/include/uit_ifnc.inl @ 64:c38311975d4f ecos-sw-2000-01-28

Merge from eCos master repository on 2000-01-28-04:28:11-GMT
author jlarmour
date Fri, 28 Jan 2000 04:59:39 +0000
parents 29bc183297e1
children bf00f99aec69
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
1 #ifndef CYGONCE_COMPAT_UITRON_UIT_IFNC_INL
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
2 #define CYGONCE_COMPAT_UITRON_UIT_IFNC_INL
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
3 //===========================================================================
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
4 //
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
5 // uit_ifnc.inl
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
6 //
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
7 // uITRON compatibility functions
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
8 //
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
9 //===========================================================================
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
10 //####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
11 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
12 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
13 // The contents of this file are subject to the Red Hat eCos Public License
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
14 // Version 1.0 (the "License"); you may not use this file except in
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
15 // compliance with the License. You may obtain a copy of the License at
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
16 // http://sourceware.cygnus.com/ecos
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
17 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
18 // Software distributed under the License is distributed on an
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
19 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
20 // License for the specific language governing rights and limitations under
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
21 // the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
22 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
23 // The Original Code is eCos - Embedded Configurable Operating System,
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
24 // released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
25 //
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
26 // The Initial Developer of the Original Code is Red Hat.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
27 // Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
28 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
29 // All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
30 // -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 34
diff changeset
31 //
34
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
32 //####COPYRIGHTEND####
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
33 //===========================================================================
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
34 //#####DESCRIPTIONBEGIN####
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
35 //
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
36 // Author(s): hmt
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
37 // Contributors: hmt
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
38 // Date: 1999-08-16
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
39 // Purpose: uITRON compatibility functions
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
40 // Description:
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
41 //
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
42 //####DESCRIPTIONEND####
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
43 //
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
44 //===========================================================================
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
45
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
46 #ifdef CYGPKG_UITRON
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
47
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
48 #ifdef CYGPRI_UITRON_FUNCS_HERE_AND_NOW
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
49
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
50 class Cyg_Uit_Action {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
51 public:
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
52 typedef enum {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
53 WUP_TSK,
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
54 SIG_SEM,
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
55 SET_FLG,
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
56 SND_MSG
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
57 } action;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
58 };
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
59
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
60 extern volatile int cyg_uit_dsr_actions_head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
61 extern volatile int cyg_uit_dsr_actions_tail;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
62
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
63 #define CYGNUM_UITRON_ISR_ACTION_QUEUEMASK (CYGNUM_UITRON_ISR_ACTION_QUEUESIZE-1)
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
64
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
65 #if ((~CYGNUM_UITRON_ISR_ACTION_QUEUEMASK) & \
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
66 ~((~CYGNUM_UITRON_ISR_ACTION_QUEUEMASK)-1)) \
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
67 != CYGNUM_UITRON_ISR_ACTION_QUEUESIZE
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
68 #error CYGNUM_UITRON_ISR_ACTION_QUEUESIZE not a power of 2
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
69 #endif
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
70
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
71 extern Cyg_Uit_Action::action
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
72 cyg_uit_dsr_actions[ CYGNUM_UITRON_ISR_ACTION_QUEUESIZE ];
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
73
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
74 extern ID
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
75 cyg_uit_dsr_act_ids[ CYGNUM_UITRON_ISR_ACTION_QUEUESIZE ];
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
76
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
77 extern CYG_ADDRWORD
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
78 cyg_uit_dsr_act_a1s[ CYGNUM_UITRON_ISR_ACTION_QUEUESIZE ];
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
79
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
80 CYG_UIT_FUNC_INLINE
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
81 ER
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
82 iwup_tsk ( ID tskid )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
83 {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
84 #ifdef CYGSEM_UITRON_ISRFUNCS_TRY_IMMEDIATE_EXECUTION
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
85 if ( 1 >= Cyg_Scheduler::get_sched_lock() ) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
86 // then this ISR is the first one, and the sched was locked by the
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
87 // interrupt code. So this is safe.
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
88 return wup_tsk( tskid );
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
89 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
90 #endif
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
91
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
92 register int i, head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
93 i = cyg_uit_dsr_actions_head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
94 head = CYGNUM_UITRON_ISR_ACTION_QUEUEMASK & ( 1 + i );
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
95 // If interrupts can be recursive, then there is a race here where a
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
96 // slot may be overwritten by a recursive interrupt, or actions from
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
97 // such lost; better though than having a slot contain *mixed* data
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
98 // from two intermingled interrupts.
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
99 if ( head != cyg_uit_dsr_actions_tail ) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
100 cyg_uit_dsr_actions_head = head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
101 cyg_uit_dsr_actions[ i ] = Cyg_Uit_Action::WUP_TSK;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
102 cyg_uit_dsr_act_ids[ i ] = tskid;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
103 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
104 return E_OK;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
105 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
106
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
107 #ifdef CYGPKG_UITRON_SEMAS
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
108 #if 0 < CYG_UITRON_NUM( SEMAS )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
109 CYG_UIT_FUNC_INLINE
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
110 ER
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
111 isig_sem ( ID semid )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
112 {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
113 #ifdef CYGSEM_UITRON_ISRFUNCS_TRY_IMMEDIATE_EXECUTION
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
114 if ( 1 >= Cyg_Scheduler::get_sched_lock() ) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
115 // then this ISR is the first one, and the sched was locked by the
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
116 // interrupt code. So this is safe.
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
117 return sig_sem( semid );
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
118 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
119 #endif
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
120
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
121 register int i, head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
122 i = cyg_uit_dsr_actions_head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
123 head = CYGNUM_UITRON_ISR_ACTION_QUEUEMASK & ( 1 + i );
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
124 // If interrupts can be recursive, then there is a race here where a
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
125 // slot may be overwritten by a recursive interrupt, or actions from
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
126 // such lost; better though than having a slot contain *mixed* data
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
127 // from two intermingled interrupts.
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
128 if ( head != cyg_uit_dsr_actions_tail ) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
129 cyg_uit_dsr_actions_head = head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
130 cyg_uit_dsr_actions[ i ] = Cyg_Uit_Action::SIG_SEM;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
131 cyg_uit_dsr_act_ids[ i ] = semid;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
132 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
133 return E_OK;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
134 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
135 #endif // 0 < CYG_UITRON_NUM( SEMAS )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
136 #endif // CYGPKG_UITRON_SEMAS
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
137
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
138 #ifdef CYGPKG_UITRON_FLAGS
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
139 #if 0 < CYG_UITRON_NUM( FLAGS )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
140 CYG_UIT_FUNC_INLINE
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
141 ER
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
142 iset_flg ( ID flgid, UINT setptn )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
143 {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
144 #ifdef CYGSEM_UITRON_ISRFUNCS_TRY_IMMEDIATE_EXECUTION
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
145 if ( 1 >= Cyg_Scheduler::get_sched_lock() ) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
146 // then this ISR is the first one, and the sched was locked by the
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
147 // interrupt code. So this is safe.
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
148 return set_flg( flgid, setptn );
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
149 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
150 #endif
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
151
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
152 register int i, head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
153 i = cyg_uit_dsr_actions_head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
154 head = CYGNUM_UITRON_ISR_ACTION_QUEUEMASK & ( 1 + i );
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
155 // If interrupts can be recursive, then there is a race here where a
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
156 // slot may be overwritten by a recursive interrupt, or actions from
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
157 // such lost; better though than having a slot contain *mixed* data
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
158 // from two intermingled interrupts.
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
159 if ( head != cyg_uit_dsr_actions_tail ) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
160 cyg_uit_dsr_actions_head = head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
161 cyg_uit_dsr_actions[ i ] = Cyg_Uit_Action::SET_FLG;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
162 cyg_uit_dsr_act_ids[ i ] = flgid;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
163 cyg_uit_dsr_act_a1s[ i ] = (CYG_ADDRWORD)setptn;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
164 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
165 return E_OK;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
166 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
167 #endif // 0 < CYG_UITRON_NUM( FLAGS )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
168 #endif // CYGPKG_UITRON_FLAGS
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
169
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
170 #ifdef CYGPKG_UITRON_MBOXES
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
171 #if 0 < CYG_UITRON_NUM( MBOXES )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
172 CYG_UIT_FUNC_INLINE
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
173 ER
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
174 isnd_msg ( ID mbxid, T_MSG *pk_msg )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
175 {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
176 #ifdef CYGSEM_UITRON_ISRFUNCS_TRY_IMMEDIATE_EXECUTION
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
177 if ( 1 >= Cyg_Scheduler::get_sched_lock() ) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
178 // then this ISR is the first one, and the sched was locked by the
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
179 // interrupt code. So this is safe.
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
180 return snd_msg( mbxid, pk_msg );
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
181 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
182 #endif
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
183
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
184 register int i, head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
185 i = cyg_uit_dsr_actions_head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
186 head = CYGNUM_UITRON_ISR_ACTION_QUEUEMASK & ( 1 + i );
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
187 // If interrupts can be recursive, then there is a race here where a
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
188 // slot may be overwritten by a recursive interrupt, or actions from
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
189 // such lost; better though than having a slot contain *mixed* data
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
190 // from two intermingled interrupts.
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
191 if ( head != cyg_uit_dsr_actions_tail ) {
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
192 cyg_uit_dsr_actions_head = head;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
193 cyg_uit_dsr_actions[ i ] = Cyg_Uit_Action::SND_MSG;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
194 cyg_uit_dsr_act_ids[ i ] = mbxid;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
195 cyg_uit_dsr_act_a1s[ i ] = (CYG_ADDRWORD)pk_msg;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
196 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
197 return E_OK;
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
198 }
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
199 #endif // 0 < CYG_UITRON_NUM( MBOXES )
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
200 #endif // CYGPKG_UITRON_MBOXES
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
201
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
202 // ========================================================================
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
203
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
204 #endif // CYGPKG_UITRON
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
205
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
206 #endif // CYGPRI_UITRON_FUNCS_HERE_AND_NOW
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
207
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
208 #endif // CYGONCE_COMPAT_UITRON_UIT_IFNC_INL
29bc183297e1 Merge from eCos master repository on 1999-09-02-16:26:10-BST
jlarmour
parents:
diff changeset
209 //EOF uit_ifnc.inl