summaryrefslogtreecommitdiffstats
path: root/c/src/exec/score/headers/context.h
blob: b3a423bb479abe0e0c8978b471e4b0aea2210136 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*  context.h
 *
 *  This include file contains all information about a context.
 *
 *  COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
 *  On-Line Applications Research Corporation (OAR).
 *  All rights assigned to U.S. Government, 1994.
 *
 *  This material may be reproduced by or for the U.S. Government pursuant
 *  to the copyright license under the clause at DFARS 252.227-7013.  This
 *  notice must appear in all copies of this file and its derivatives.
 *
 *  $Id$
 */

#ifndef __RTEMS_CONTEXT_h
#define __RTEMS_CONTEXT_h

#ifdef __cplusplus
extern "C" {
#endif

#include <rtems/score/cpu.h>

/*
 *  The following constant defines the number of bytes required
 *  to store a full floating point context.
 */

#define CONTEXT_FP_SIZE CPU_CONTEXT_FP_SIZE

/*
 *  The following variable is set to TRUE when a reschedule operation
 *  has determined that the processor should be taken away from the
 *  currently executing thread and given to the heir thread.
 */

EXTERN boolean _Context_Switch_necessary;

/*
 *  _Context_Initialize
 *
 *  DESCRIPTION:
 *
 *  This routine initializes THE_CONTEXT such that the stack
 *  pointer, interrupt level, and entry point are correct for the
 *  thread's initial state.
 */

#define _Context_Initialize( _the_context, _stack, _size, _isr, _entry ) \
   _CPU_Context_Initialize( _the_context, _stack, _size, _isr, _entry )

/*
 *  _Context_Switch
 *
 *  DESCRIPTION:
 *
 *  This routine saves the current context into the EXECUTING
 *  context record and restores the context specified by HEIR.
 */

#define _Context_Switch( _executing, _heir ) \
   _CPU_Context_switch( _executing, _heir )

/*
 *  _Context_Restart_self
 *
 *  DESCRIPTION:
 *
 *  This routine restarts the calling thread by restoring its initial
 *  stack pointer and returning to the thread's entry point.
 */

#define _Context_Restart_self( _the_context ) \
   _CPU_Context_Restart_self( _the_context )

/*
 *  _Context_Fp_start
 *
 *  DESCRIPTION:
 *
 *  This function returns the starting address of the floating
 *  point context save area.  It is assumed that the are reserved
 *  for the floating point save area is large enough.
 */

#define _Context_Fp_start( _base, _offset ) \
   _CPU_Context_Fp_start( (_base), (_offset) )

/*
 *  _Context_Initialize_fp
 *
 *  DESCRIPTION:
 *
 *  This routine initializes the floating point context save
 *  area to contain an initial known state.
 */

#define _Context_Initialize_fp( _fp_area ) \
   _CPU_Context_Initialize_fp( _fp_area )

/*
 *  _Context_Restore_fp
 *
 *  DESCRIPTION:
 *
 *  This routine restores the floating point context contained
 *  in the FP_CONTEXT area.  It is assumed that the current
 *  floating point context has been saved by a previous invocation
 *  of SAVE_FP.
 */

#define _Context_Restore_fp( _fp ) \
   _CPU_Context_restore_fp( _fp )

/*
 *  _Context_Save_fp
 *
 *  DESCRIPTION:
 *
 *  This routine saves the current floating point context
 *  in the FP_CONTEXT area.
 */

#define _Context_Save_fp( _fp ) \
   _CPU_Context_save_fp( _fp )

#ifdef __cplusplus
}
#endif

#endif
/* end of include file */