source: rtems/cpukit/score/include/rtems/score/schedulerprioritysmp.h @ beab7329

4.115
Last change on this file since beab7329 was beab7329, checked in by Sebastian Huber <sebastian.huber@…>, on 05/13/14 at 14:03:05

score: Introduce scheduler nodes

Rename scheduler per-thread information into scheduler nodes using
Scheduler_Node as the base type. Use inheritance for specialized
schedulers.

Move the scheduler specific states from the thread control block into
the scheduler node structure.

Validate the SMP scheduler node state transitions in case RTEMS_DEBUG is
defined.

  • Property mode set to 100644
File size: 3.7 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup ScoreSchedulerPrioritySMP
5 *
6 * @brief Deterministic Priority SMP Scheduler API
7 */
8
9/*
10 * Copyright (c) 2013 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_SCHEDULERPRIORITYSMP_H
24#define _RTEMS_SCORE_SCHEDULERPRIORITYSMP_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 ScoreSchedulerPrioritySMP Deterministic Priority SMP 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 thread preempt mode will be ignored.
46 *
47 * @{
48 */
49
50/**
51 * @brief Scheduler context specialization for Deterministic Priority SMP
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_priority_SMP_Context;
59
60/**
61 * @brief Scheduler node specialization for Deterministic Priority SMP
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_priority_SMP_Node;
75
76/**
77 * @brief Entry points for the Priority SMP Scheduler.
78 */
79#define SCHEDULER_PRIORITY_SMP_ENTRY_POINTS \
80  { \
81    _Scheduler_priority_SMP_Initialize, \
82    _Scheduler_priority_SMP_Schedule, \
83    _Scheduler_priority_SMP_Yield, \
84    _Scheduler_priority_SMP_Block, \
85    _Scheduler_priority_SMP_Enqueue_fifo, \
86    _Scheduler_priority_SMP_Allocate, \
87    _Scheduler_default_Free, \
88    _Scheduler_priority_SMP_Update, \
89    _Scheduler_priority_SMP_Enqueue_fifo, \
90    _Scheduler_priority_SMP_Enqueue_lifo, \
91    _Scheduler_priority_SMP_Extract, \
92    _Scheduler_priority_Priority_compare, \
93    _Scheduler_default_Release_job, \
94    _Scheduler_default_Tick, \
95    _Scheduler_priority_SMP_Start_idle, \
96    _Scheduler_default_Get_affinity, \
97    _Scheduler_default_Set_affinity \
98  }
99
100void _Scheduler_priority_SMP_Initialize( const Scheduler_Control *scheduler );
101
102bool _Scheduler_priority_SMP_Allocate(
103  const Scheduler_Control *scheduler,
104  Thread_Control *thread
105);
106
107void _Scheduler_priority_SMP_Schedule(
108  const Scheduler_Control *scheduler,
109  Thread_Control *thread
110);
111
112void _Scheduler_priority_SMP_Block(
113  const Scheduler_Control *scheduler,
114  Thread_Control *thread
115);
116
117void _Scheduler_priority_SMP_Update(
118  const Scheduler_Control *scheduler,
119  Thread_Control *thread
120);
121
122void _Scheduler_priority_SMP_Enqueue_fifo(
123  const Scheduler_Control *scheduler,
124  Thread_Control *thread
125);
126
127void _Scheduler_priority_SMP_Enqueue_lifo(
128  const Scheduler_Control *scheduler,
129  Thread_Control *thread
130);
131
132void _Scheduler_priority_SMP_Extract(
133  const Scheduler_Control *scheduler,
134  Thread_Control *thread
135);
136
137void _Scheduler_priority_SMP_Yield(
138  const Scheduler_Control *scheduler,
139  Thread_Control *thread
140);
141
142void _Scheduler_priority_SMP_Start_idle(
143  const Scheduler_Control *scheduler,
144  Thread_Control *thread,
145  Per_CPU_Control *cpu
146);
147
148/** @} */
149
150#ifdef __cplusplus
151}
152#endif /* __cplusplus */
153
154#endif /* _RTEMS_SCORE_SCHEDULERPRIORITYSMP_H */
Note: See TracBrowser for help on using the repository browser.