Toggle navigation
Documentation
The friendly Operating System for the Internet of Things
Loading...
Searching...
No Matches
context_frame.h
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2017, 2019 JP Bonn, Ken Rabold
3
* SPDX-License-Identifier: LGPL-2.1-only
4
*/
5
6
#pragma once
7
17
18
#if !defined(__ASSEMBLER__)
19
#include <stdint.h>
20
#endif
/* __ASSEMBLER__ */
21
22
#ifdef __cplusplus
23
extern
"C"
{
24
#endif
25
26
#define REGSZ (__riscv_xlen / 8)
27
28
#if __riscv_xlen == 64
32
# define REG_L ld
36
# define REG_S sd
37
#else
41
# define REG_L lw
45
# define REG_S sw
46
#endif
47
48
#if !defined(__ASSEMBLER__)
49
58
struct
context_switch_frame
{
59
/* Callee saved registers */
60
uintptr_t
s0
;
61
uintptr_t
s1
;
62
uintptr_t
s2
;
63
uintptr_t
s3
;
64
uintptr_t
s4
;
65
uintptr_t
s5
;
66
uintptr_t
s6
;
67
uintptr_t
s7
;
68
uintptr_t
s8
;
69
uintptr_t
s9
;
70
uintptr_t
s10
;
71
uintptr_t
s11
;
72
/* Caller saved registers */
73
uintptr_t
ra
;
74
uintptr_t
t0
;
75
uintptr_t
t1
;
76
uintptr_t
t2
;
77
uintptr_t
t3
;
78
uintptr_t
t4
;
79
uintptr_t
t5
;
80
uintptr_t
t6
;
81
uintptr_t
a0
;
82
uintptr_t
a1
;
83
uintptr_t
a2
;
84
uintptr_t
a3
;
85
uintptr_t
a4
;
86
uintptr_t
a5
;
87
uintptr_t
a6
;
88
uintptr_t
a7
;
89
/* Saved PC for return from ISR */
90
uintptr_t
pc
;
91
uintptr_t
pad
[3];
92
};
93
94
#endif
/* __ASSEMBLER__ */
95
100
/* These values are checked for correctness in context_frame.c */
101
#define s0_OFFSET (0 * REGSZ)
102
#define s1_OFFSET (1 * REGSZ)
103
#define s2_OFFSET (2 * REGSZ)
104
#define s3_OFFSET (3 * REGSZ)
105
#define s4_OFFSET (4 * REGSZ)
106
#define s5_OFFSET (5 * REGSZ)
107
#define s6_OFFSET (6 * REGSZ)
108
#define s7_OFFSET (7 * REGSZ)
109
#define s8_OFFSET (8 * REGSZ)
110
#define s9_OFFSET (9 * REGSZ)
111
#define s10_OFFSET (10 * REGSZ)
112
#define s11_OFFSET (11 * REGSZ)
113
#define ra_OFFSET (12 * REGSZ)
114
#define t0_OFFSET (13 * REGSZ)
115
#define t1_OFFSET (14 * REGSZ)
116
#define t2_OFFSET (15 * REGSZ)
117
#define t3_OFFSET (16 * REGSZ)
118
#define t4_OFFSET (17 * REGSZ)
119
#define t5_OFFSET (18 * REGSZ)
120
#define t6_OFFSET (19 * REGSZ)
121
#define a0_OFFSET (20 * REGSZ)
122
#define a1_OFFSET (21 * REGSZ)
123
#define a2_OFFSET (22 * REGSZ)
124
#define a3_OFFSET (23 * REGSZ)
125
#define a4_OFFSET (24 * REGSZ)
126
#define a5_OFFSET (25 * REGSZ)
127
#define a6_OFFSET (26 * REGSZ)
128
#define a7_OFFSET (27 * REGSZ)
129
#define pc_OFFSET (28 * REGSZ)
130
#define pad_OFFSET (29 * REGSZ)
132
136
#define CONTEXT_FRAME_SIZE (pad_OFFSET + 3 * REGSZ)
137
141
#define SP_OFFSET_IN_THREAD 0
142
143
#ifdef __cplusplus
144
}
145
#endif
146
context_switch_frame
Stores the registers and PC for a context switch.
Definition
context_frame.h:58
context_switch_frame::ra
uintptr_t ra
ra register
Definition
context_frame.h:73
context_switch_frame::t2
uintptr_t t2
t2 register
Definition
context_frame.h:76
context_switch_frame::s2
uintptr_t s2
s2 register
Definition
context_frame.h:62
context_switch_frame::s3
uintptr_t s3
s3 register
Definition
context_frame.h:63
context_switch_frame::s10
uintptr_t s10
s10 register
Definition
context_frame.h:70
context_switch_frame::s5
uintptr_t s5
s5 register
Definition
context_frame.h:65
context_switch_frame::s7
uintptr_t s7
s7 register
Definition
context_frame.h:67
context_switch_frame::a6
uintptr_t a6
a6 register
Definition
context_frame.h:87
context_switch_frame::t1
uintptr_t t1
t1 register
Definition
context_frame.h:75
context_switch_frame::a7
uintptr_t a7
a7 register
Definition
context_frame.h:88
context_switch_frame::t5
uintptr_t t5
t5 register
Definition
context_frame.h:79
context_switch_frame::s1
uintptr_t s1
s1 register
Definition
context_frame.h:61
context_switch_frame::t0
uintptr_t t0
t0 register
Definition
context_frame.h:74
context_switch_frame::a4
uintptr_t a4
a4 register
Definition
context_frame.h:85
context_switch_frame::a5
uintptr_t a5
a5 register
Definition
context_frame.h:86
context_switch_frame::s11
uintptr_t s11
s11 register
Definition
context_frame.h:71
context_switch_frame::pad
uintptr_t pad[3]
padding to maintain 16 byte alignment
Definition
context_frame.h:91
context_switch_frame::a2
uintptr_t a2
a2 register
Definition
context_frame.h:83
context_switch_frame::s6
uintptr_t s6
s6 register
Definition
context_frame.h:66
context_switch_frame::a3
uintptr_t a3
a3 register
Definition
context_frame.h:84
context_switch_frame::a0
uintptr_t a0
a0 register
Definition
context_frame.h:81
context_switch_frame::a1
uintptr_t a1
a1 register
Definition
context_frame.h:82
context_switch_frame::t4
uintptr_t t4
t4 register
Definition
context_frame.h:78
context_switch_frame::t6
uintptr_t t6
t6 register
Definition
context_frame.h:80
context_switch_frame::s4
uintptr_t s4
s4 register
Definition
context_frame.h:64
context_switch_frame::s8
uintptr_t s8
s8 register
Definition
context_frame.h:68
context_switch_frame::t3
uintptr_t t3
t3 register
Definition
context_frame.h:77
context_switch_frame::s9
uintptr_t s9
s9 register
Definition
context_frame.h:69
context_switch_frame::s0
uintptr_t s0
s0 register
Definition
context_frame.h:60
context_switch_frame::pc
uintptr_t pc
program counter
Definition
context_frame.h:90
Generated on Sat Aug 15 2026 23:30:17 by
1.13.2