source: rtems/cpukit/score/include/rtems/score/schedulerstrongapa.h @ 9c238e1

5
Last change on this file since 9c238e1 was 9c238e1, checked in by Sebastian Huber <sebastian.huber@…>, on Oct 21, 2016 at 12:33:01 PM

score: Simplify update priority scheduler op

Remove unused return status.

  • Property mode set to 100644
File size: 4.3 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup ScoreSchedulerStrongAPA
5 *
6 * @brief Strong APA Scheduler API
7 */
8
9/*
10 * Copyright (c) 2013, 2016 embedded brains GmbH.  All rights reserved.
11 *
12 *  embedded brains GmbH
13 *  Dornierstr. 4
14 *  82178 Puchheim
15 *  Germany
16 *  <rtems@embedded-brains.de>
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.org/license/LICENSE.
21 */
22
23#ifndef _RTEMS_SCORE_SCHEDULERSTRONGAPA_H
24#define _RTEMS_SCORE_SCHEDULERSTRONGAPA_H
25
26#include <rtems/score/scheduler.h>
27#include <rtems/score/schedulerpriority.h>
28#include <rtems/score/schedulersmp.h>
29
30#ifdef __cplusplus
31extern "C" {
32#endif /* __cplusplus */
33
34/**
35 * @defgroup ScoreSchedulerStrongAPA Strong APA Scheduler
36 *
37 * @ingroup ScoreSchedulerSMP
38 *
39 * This is an implementation of the global fixed priority scheduler (G-FP).  It
40 * uses one ready chain per priority to ensure constant time insert operations.
41 * The scheduled chain uses linear insert operations and has at most processor
42 * count entries.  Since the processor and priority count are constants all
43 * scheduler operations complete in a bounded execution time.
44 *
45 * The the_thread preempt mode will be ignored.
46 *
47 * @{
48 */
49
50/**
51 * @brief Scheduler context specialization for Strong APA
52 * schedulers.
53 */
54typedef struct {
55  Scheduler_SMP_Context    Base;
56  Priority_bit_map_Control Bit_map;
57  Chain_Control            Ready[ RTEMS_ZERO_LENGTH_ARRAY ];
58} Scheduler_strong_APA_Context;
59
60/**
61 * @brief Scheduler node specialization for Strong APA
62 * schedulers.
63 */
64typedef struct {
65  /**
66   * @brief SMP scheduler node.
67   */
68  Scheduler_SMP_Node Base;
69
70  /**
71   * @brief The associated ready queue of this node.
72   */
73  Scheduler_priority_Ready_queue Ready_queue;
74} Scheduler_strong_APA_Node;
75
76/**
77 * @brief Entry points for the Strong APA Scheduler.
78 */
79#define SCHEDULER_STRONG_APA_ENTRY_POINTS \
80  { \
81    _Scheduler_strong_APA_Initialize, \
82    _Scheduler_default_Schedule, \
83    _Scheduler_strong_APA_Yield, \
84    _Scheduler_strong_APA_Block, \
85    _Scheduler_strong_APA_Unblock, \
86    _Scheduler_strong_APA_Update_priority, \
87    _Scheduler_default_Map_priority, \
88    _Scheduler_default_Unmap_priority, \
89    _Scheduler_strong_APA_Ask_for_help, \
90    _Scheduler_strong_APA_Reconsider_help_request, \
91    _Scheduler_strong_APA_Withdraw_node, \
92    _Scheduler_strong_APA_Ask_for_help_X, \
93    _Scheduler_strong_APA_Node_initialize, \
94    _Scheduler_default_Node_destroy, \
95    _Scheduler_default_Release_job, \
96    _Scheduler_default_Cancel_job, \
97    _Scheduler_default_Tick, \
98    _Scheduler_SMP_Start_idle \
99    SCHEDULER_OPERATION_DEFAULT_GET_SET_AFFINITY \
100  }
101
102void _Scheduler_strong_APA_Initialize( const Scheduler_Control *scheduler );
103
104void _Scheduler_strong_APA_Node_initialize(
105  const Scheduler_Control *scheduler,
106  Scheduler_Node          *node,
107  Thread_Control          *the_thread,
108  Priority_Control         priority
109);
110
111void _Scheduler_strong_APA_Block(
112  const Scheduler_Control *scheduler,
113  Thread_Control          *the_thread,
114  Scheduler_Node          *node
115);
116
117Thread_Control *_Scheduler_strong_APA_Unblock(
118  const Scheduler_Control *scheduler,
119  Thread_Control          *the_thread,
120  Scheduler_Node          *node
121);
122
123void _Scheduler_strong_APA_Update_priority(
124  const Scheduler_Control *scheduler,
125  Thread_Control          *the_thread,
126  Scheduler_Node          *node
127);
128
129bool _Scheduler_strong_APA_Ask_for_help(
130  const Scheduler_Control *scheduler,
131  Thread_Control          *the_thread,
132  Scheduler_Node          *node
133);
134
135void _Scheduler_strong_APA_Reconsider_help_request(
136  const Scheduler_Control *scheduler,
137  Thread_Control          *the_thread,
138  Scheduler_Node          *node
139);
140
141void _Scheduler_strong_APA_Withdraw_node(
142  const Scheduler_Control *scheduler,
143  Thread_Control          *the_thread,
144  Scheduler_Node          *node,
145  Thread_Scheduler_state   next_state
146);
147
148Thread_Control *_Scheduler_strong_APA_Ask_for_help_X(
149  const Scheduler_Control *scheduler,
150  Thread_Control          *needs_help,
151  Thread_Control          *offers_help
152);
153
154Thread_Control *_Scheduler_strong_APA_Yield(
155  const Scheduler_Control *scheduler,
156  Thread_Control          *the_thread,
157  Scheduler_Node          *node
158);
159
160/** @} */
161
162#ifdef __cplusplus
163}
164#endif /* __cplusplus */
165
166#endif /* _RTEMS_SCORE_SCHEDULERSTRONGAPA_H */
Note: See TracBrowser for help on using the repository browser.