source: rtems/c/src/exec/score/headers/priority.h @ 7f6a24ab

4.104.114.84.95
Last change on this file since 7f6a24ab was 7f6a24ab, checked in by Joel Sherrill <joel.sherrill@…>, on 08/28/95 at 15:30:29

Added unused priority ceiling parameter to rtems_semaphore_create.

Rearranged code to created thread handler routines to initialize,
start, restart, and "close/delete" a thread.

Made internal threads their own object class. This now uses the
thread support routines for starting and initializing a thread.

Insured deleted tasks are freed to the Inactive pool associated with the
correct Information block.

Added an RTEMS API specific data area to the thread control block.

Beginnings of removing the word "rtems" from the core.

  • Property mode set to 100644
File size: 4.6 KB
Line 
1/*  priority.h
2 *
3 *  This include file contains all thread priority manipulation routines.
4 *  This Handler provides mechanisms which can be used to
5 *  initialize and manipulate RTEMS priorities.
6 *
7 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
8 *  On-Line Applications Research Corporation (OAR).
9 *  All rights assigned to U.S. Government, 1994.
10 *
11 *  This material may be reproduced by or for the U.S. Government pursuant
12 *  to the copyright license under the clause at DFARS 252.227-7013.  This
13 *  notice must appear in all copies of this file and its derivatives.
14 *
15 *  $Id$
16 */
17
18#ifndef __RTEMS_PRIORITY_h
19#define __RTEMS_PRIORITY_h
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25/*
26 *  The following type defines the control block used to manage
27 *  thread priorities.
28 *
29 *  NOTE: Priority 0 is reserved for internal threads only.
30 */
31
32typedef unsigned32 Priority_Control;
33
34#define RTEMS_MINIMUM_PRIORITY      1         /* highest thread priority */
35#define RTEMS_MAXIMUM_PRIORITY      255       /* lowest thread priority */
36
37/*
38 *  The following record defines the information associated with
39 *  each thread to manage its interaction with the priority bit maps.
40 */
41
42typedef struct {
43  Priority_Bit_map_control *minor;        /* addr of minor bit map slot */
44  Priority_Bit_map_control  ready_major;  /* priority bit map ready mask */
45  Priority_Bit_map_control  ready_minor;  /* priority bit map ready mask */
46  Priority_Bit_map_control  block_major;  /* priority bit map block mask */
47  Priority_Bit_map_control  block_minor;  /* priority bit map block mask */
48}   Priority_Information;
49
50/*
51 *  The following data items are the priority bit map.
52 *  Each of the sixteen bits used in the _Priority_Major_bit_map is
53 *  associated with one of the sixteen entries in the _Priority_Bit_map.
54 *  Each bit in the _Priority_Bit_map indicates whether or not there are
55 *  threads ready at a particular priority.  The mapping of
56 *  individual priority levels to particular bits is processor
57 *  dependent as is the value of each bit used to indicate that
58 *  threads are ready at that priority.
59 */
60
61EXTERN volatile Priority_Bit_map_control _Priority_Major_bit_map;
62EXTERN Priority_Bit_map_control _Priority_Bit_map[16] CPU_STRUCTURE_ALIGNMENT;
63
64/*
65 *  The following constants are useful when manipulating priority.
66 */
67
68#define RTEMS_CURRENT_PRIORITY      0         /* obtain current priority */
69
70/*
71 *  The definition of the Priority_Bit_map_control type is CPU dependent.
72 *
73 */
74
75/*
76 *  _Priority_Handler_initialization
77 *
78 *  DESCRIPTION:
79 *
80 *  This routine performs the initialization necessary for this handler.
81 */
82
83STATIC INLINE void _Priority_Handler_initialization( void );
84
85/*
86 *  _Priority_Is_valid
87 *
88 *  DESCRIPTION:
89 *
90 *  This function returns TRUE if the_priority if valid for a
91 *  user task, and FALSE otherwise.
92 */
93
94STATIC INLINE boolean _Priority_Is_valid (
95  Priority_Control the_priority
96);
97
98/*
99 *  _Priority_Major
100 *
101 *  DESCRIPTION:
102 *
103 *  This function returns the major portion of the_priority.
104 */
105
106STATIC INLINE unsigned32 _Priority_Major (
107  Priority_Control the_priority
108);
109
110/*
111 *  _Priority_Minor
112 *
113 *  DESCRIPTION:
114 *
115 *  This function returns the minor portion of the_priority.
116 */
117
118STATIC INLINE unsigned32 _Priority_Minor (
119  Priority_Control the_priority
120);
121
122/*
123 *  _Priority_Add_to_bit_map
124 *
125 *  DESCRIPTION:
126 *
127 *  This routine uses the_priority_map to update the priority
128 *  bit maps to indicate that a thread has been readied.
129 */
130
131STATIC INLINE void _Priority_Add_to_bit_map (
132  Priority_Information *the_priority_map
133);
134
135/*
136 *  _Priority_Remove_from_bit_map
137 *
138 *  DESCRIPTION:
139 *
140 *  This routine uses the_priority_map to update the priority
141 *  bit maps to indicate that a thread has been removed from the
142 *  ready state.
143 */
144
145STATIC INLINE void _Priority_Remove_from_bit_map (
146  Priority_Information *the_priority_map
147);
148
149/*
150 *  _Priority_Get_highest
151 *
152 *  DESCRIPTION:
153 *
154 *  This function returns the priority of the highest priority
155 *  ready thread.
156 */
157
158STATIC INLINE Priority_Control _Priority_Get_highest( void );
159
160/*
161 *  _Priority_Initialize_information
162 *
163 *  DESCRIPTION:
164 *
165 *  This routine initializes the_priority_map so that it
166 *  contains the information necessary to manage a thread
167 *  at new_priority.
168 */
169
170STATIC INLINE void _Priority_Initialize_information(
171  Priority_Information *the_priority_map,
172  Priority_Control      new_priority
173);
174
175/*
176 *  _Priority_Is_group_empty
177 *
178 *  DESCRIPTION:
179 *
180 *  This function returns TRUE if the priority GROUP is empty, and
181 *  FALSE otherwise.
182 */
183
184STATIC INLINE boolean _Priority_Is_group_empty (
185  Priority_Control      the_priority
186);
187
188#include <rtems/priority.inl>
189
190#ifdef __cplusplus
191}
192#endif
193
194#endif
195/* end of include file */
Note: See TracBrowser for help on using the repository browser.