source: rtems/cpukit/rtems/src/taskmp.c @ 50b73d3

5
Last change on this file since 50b73d3 was 50b73d3, checked in by Joel Sherrill <joel@…>, on 03/21/16 at 00:28:20

cpukit/rtems/src/*mp.c: Fix set but not used warning

  • Property mode set to 100644
File size: 7.0 KB
Line 
1/**
2 * @file
3 *
4 * @brief RTEMS Tasks MP Send Process Packet
5 * @ingroup ClassicTaskMP Task MP Support
6 */
7
8/*
9 *  COPYRIGHT (c) 1989-2008.
10 *  On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.org/license/LICENSE.
15 */
16
17#if HAVE_CONFIG_H
18#include "config.h"
19#endif
20
21#include <rtems/rtems/tasksimpl.h>
22#include <rtems/rtems/optionsimpl.h>
23#include <rtems/score/statesimpl.h>
24#include <rtems/score/threadimpl.h>
25#include <rtems/score/threadqimpl.h>
26
27RTEMS_STATIC_ASSERT(
28  sizeof(RTEMS_tasks_MP_Packet) <= MP_PACKET_MINIMUM_PACKET_SIZE,
29  RTEMS_tasks_MP_Packet
30);
31
32/*
33 *  _RTEMS_tasks_MP_Send_process_packet
34 *
35 */
36
37void _RTEMS_tasks_MP_Send_process_packet (
38  RTEMS_tasks_MP_Remote_operations operation,
39  Objects_Id                       task_id,
40  rtems_name                       name
41)
42{
43  RTEMS_tasks_MP_Packet *the_packet;
44
45  switch ( operation ) {
46
47    case RTEMS_TASKS_MP_ANNOUNCE_CREATE:
48    case RTEMS_TASKS_MP_ANNOUNCE_DELETE:
49
50      the_packet                    = _RTEMS_tasks_MP_Get_packet();
51      the_packet->Prefix.the_class  = MP_PACKET_TASKS;
52      the_packet->Prefix.length     = sizeof ( RTEMS_tasks_MP_Packet );
53      the_packet->Prefix.to_convert = sizeof ( RTEMS_tasks_MP_Packet );
54      the_packet->operation         = operation;
55      the_packet->Prefix.id         = task_id;
56      the_packet->name              = name;
57
58      _MPCI_Send_process_packet( MPCI_ALL_NODES, &the_packet->Prefix );
59      break;
60
61    case RTEMS_TASKS_MP_SUSPEND_REQUEST:
62    case RTEMS_TASKS_MP_SUSPEND_RESPONSE:
63    case RTEMS_TASKS_MP_RESUME_REQUEST:
64    case RTEMS_TASKS_MP_RESUME_RESPONSE:
65    case RTEMS_TASKS_MP_SET_PRIORITY_REQUEST:
66    case RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE:
67      break;
68  }
69}
70
71/*
72 *  _RTEMS_tasks_MP_Send_request_packet
73 *
74 */
75
76rtems_status_code _RTEMS_tasks_MP_Send_request_packet (
77  RTEMS_tasks_MP_Remote_operations operation,
78  Objects_Id                       task_id,
79  rtems_task_priority              new_priority
80)
81{
82  RTEMS_tasks_MP_Packet *the_packet;
83
84  switch ( operation ) {
85
86    case RTEMS_TASKS_MP_SUSPEND_REQUEST:
87    case RTEMS_TASKS_MP_RESUME_REQUEST:
88    case RTEMS_TASKS_MP_SET_PRIORITY_REQUEST:
89
90      the_packet                    = _RTEMS_tasks_MP_Get_packet();
91      the_packet->Prefix.the_class  = MP_PACKET_TASKS;
92      the_packet->Prefix.length     = sizeof ( RTEMS_tasks_MP_Packet );
93      the_packet->Prefix.to_convert = sizeof ( RTEMS_tasks_MP_Packet );
94      the_packet->operation         = operation;
95      the_packet->Prefix.id         = task_id;
96      the_packet->the_priority      = new_priority;
97
98      return _MPCI_Send_request_packet(
99        _Objects_Get_node( task_id ),
100        &the_packet->Prefix,
101        STATES_READY,    /* Not used */
102        RTEMS_TIMEOUT
103      );
104      break;
105
106    case RTEMS_TASKS_MP_ANNOUNCE_CREATE:
107    case RTEMS_TASKS_MP_ANNOUNCE_DELETE:
108    case RTEMS_TASKS_MP_SUSPEND_RESPONSE:
109    case RTEMS_TASKS_MP_RESUME_RESPONSE:
110    case RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE:
111      break;
112
113  }
114  /*
115   *  The following line is included to satisfy compilers which
116   *  produce warnings when a function does not end with a return.
117   */
118  return RTEMS_SUCCESSFUL;
119}
120
121/*
122 *  _RTEMS_tasks_MP_Send_response_packet
123 *
124 */
125
126void _RTEMS_tasks_MP_Send_response_packet (
127  RTEMS_tasks_MP_Remote_operations  operation,
128  Thread_Control                   *the_thread
129)
130{
131  RTEMS_tasks_MP_Packet *the_packet;
132
133  switch ( operation ) {
134
135    case RTEMS_TASKS_MP_SUSPEND_RESPONSE:
136    case RTEMS_TASKS_MP_RESUME_RESPONSE:
137    case RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE:
138
139      the_packet = (RTEMS_tasks_MP_Packet *) the_thread->receive_packet;
140
141/*
142 *  The packet being returned already contains the class, length, and
143 *  to_convert fields, therefore they are not set in this routine.
144 */
145      the_packet->operation    = operation;
146      the_packet->Prefix.id    = the_packet->Prefix.source_tid;
147
148      _MPCI_Send_response_packet(
149        _Objects_Get_node( the_packet->Prefix.source_tid ),
150        &the_packet->Prefix
151      );
152      break;
153
154    case RTEMS_TASKS_MP_ANNOUNCE_CREATE:
155    case RTEMS_TASKS_MP_ANNOUNCE_DELETE:
156    case RTEMS_TASKS_MP_SUSPEND_REQUEST:
157    case RTEMS_TASKS_MP_RESUME_REQUEST:
158    case RTEMS_TASKS_MP_SET_PRIORITY_REQUEST:
159      break;
160
161  }
162}
163
164/*
165 *
166 *  _RTEMS_tasks_MP_Process_packet
167 *
168 */
169
170void _RTEMS_tasks_MP_Process_packet (
171  rtems_packet_prefix  *the_packet_prefix
172)
173{
174  RTEMS_tasks_MP_Packet *the_packet;
175  Thread_Control   *the_thread;
176  bool           ignored;
177
178  the_packet = (RTEMS_tasks_MP_Packet *) the_packet_prefix;
179
180  switch ( the_packet->operation ) {
181
182    case RTEMS_TASKS_MP_ANNOUNCE_CREATE:
183
184      ignored = _Objects_MP_Allocate_and_open(
185                  &_RTEMS_tasks_Information.Objects,
186                  the_packet->name,
187                  the_packet->Prefix.id,
188                  true
189                );
190
191      _MPCI_Return_packet( the_packet_prefix );
192      break;
193
194    case RTEMS_TASKS_MP_ANNOUNCE_DELETE:
195
196      _Objects_MP_Close(
197        &_RTEMS_tasks_Information.Objects,
198        the_packet->Prefix.id
199      );
200
201      _MPCI_Return_packet( the_packet_prefix );
202      break;
203
204    case RTEMS_TASKS_MP_SUSPEND_REQUEST:
205
206      the_packet->Prefix.return_code = rtems_task_suspend(
207        the_packet->Prefix.id
208      );
209
210      _RTEMS_tasks_MP_Send_response_packet(
211        RTEMS_TASKS_MP_SUSPEND_RESPONSE,
212        _Thread_Executing
213      );
214      break;
215
216    case RTEMS_TASKS_MP_SUSPEND_RESPONSE:
217    case RTEMS_TASKS_MP_RESUME_RESPONSE:
218
219      the_thread = _MPCI_Process_response( the_packet_prefix );
220
221      _MPCI_Return_packet( the_packet_prefix );
222      break;
223
224    case RTEMS_TASKS_MP_RESUME_REQUEST:
225
226      the_packet->Prefix.return_code = rtems_task_resume(
227        the_packet->Prefix.id
228      );
229
230      _RTEMS_tasks_MP_Send_response_packet(
231        RTEMS_TASKS_MP_RESUME_RESPONSE,
232        _Thread_Executing
233      );
234      break;
235
236    case RTEMS_TASKS_MP_SET_PRIORITY_REQUEST:
237
238      the_packet->Prefix.return_code = rtems_task_set_priority(
239        the_packet->Prefix.id,
240        the_packet->the_priority,
241        &the_packet->the_priority
242      );
243
244      _RTEMS_tasks_MP_Send_response_packet(
245        RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE,
246        _Thread_Executing
247      );
248      break;
249
250    case RTEMS_TASKS_MP_SET_PRIORITY_RESPONSE:
251
252      the_thread = _MPCI_Process_response( the_packet_prefix );
253
254      *(rtems_task_priority *)the_thread->Wait.return_argument =
255                                               the_packet->the_priority;
256
257      _MPCI_Return_packet( the_packet_prefix );
258      break;
259  }
260
261  ignored; /* avoid set but not used warning */
262}
263
264/*
265 *  _RTEMS_tasks_MP_Send_object_was_deleted
266 *
267 *  This routine is not neededby the Tasks since a task
268 *  cannot be globally deleted.
269 *
270 */
271
272/*
273 *  _RTEMS_tasks_MP_Send_extract_proxy
274 *
275 *  This routine is not neededby the Tasks since a task
276 *  cannot be globally deleted.
277 *
278 */
279
280/*
281 *  _RTEMS_tasks_MP_Get_packet
282 *
283 */
284
285RTEMS_tasks_MP_Packet *_RTEMS_tasks_MP_Get_packet ( void )
286{
287  return (RTEMS_tasks_MP_Packet *) _MPCI_Get_packet();
288}
289
290/* end of file */
Note: See TracBrowser for help on using the repository browser.