Zephyr API Documentation
4.3.0-rc2
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
thread.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2017 Intel Corporation
3
* Copyright 2025 Arm Limited and/or its affiliates <open-source-office@arm.com>
4
*
5
* SPDX-License-Identifier: Apache-2.0
6
*/
7
19
20
#ifndef ZEPHYR_INCLUDE_ARCH_ARM_THREAD_H_
21
#define ZEPHYR_INCLUDE_ARCH_ARM_THREAD_H_
22
23
#ifndef _ASMLANGUAGE
24
#include <
zephyr/types.h
>
25
26
struct
_callee_saved {
27
uint32_t
v1;
/* r4 */
28
uint32_t
v2;
/* r5 */
29
uint32_t
v3;
/* r6 */
30
uint32_t
v4;
/* r7 */
31
uint32_t
v5;
/* r8 */
32
uint32_t
v6;
/* r9 */
33
uint32_t
v7;
/* r10 */
34
uint32_t
v8;
/* r11 */
35
uint32_t
psp;
/* r13 */
36
#ifdef CONFIG_USE_SWITCH
37
uint32_t
lr;
/* lr */
38
#endif
39
};
40
41
typedef
struct
_callee_saved _callee_saved_t;
42
43
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
44
struct
_preempt_float {
45
float
s16;
46
float
s17;
47
float
s18;
48
float
s19;
49
float
s20;
50
float
s21;
51
float
s22;
52
float
s23;
53
float
s24;
54
float
s25;
55
float
s26;
56
float
s27;
57
float
s28;
58
float
s29;
59
float
s30;
60
float
s31;
61
};
62
#endif
63
64
#if defined(CONFIG_ARM_PAC_PER_THREAD)
65
struct
pac_keys {
66
uint32_t
key_0;
67
uint32_t
key_1;
68
uint32_t
key_2;
69
uint32_t
key_3;
70
};
71
#endif
72
73
struct
_thread_arch {
74
75
/* interrupt locking key */
76
uint32_t
basepri;
77
78
/* r0 in stack frame cannot be written to reliably */
79
uint32_t
swap_return_value;
80
81
#if defined(CONFIG_FPU) && defined(CONFIG_FPU_SHARING)
82
/*
83
* No cooperative floating point register set structure exists for
84
* the Cortex-M as it automatically saves the necessary registers
85
* in its exception stack frame.
86
*/
87
struct
_preempt_float preempt_float;
88
#endif
89
90
#if defined(CONFIG_CPU_AARCH32_CORTEX_A) || defined(CONFIG_CPU_AARCH32_CORTEX_R)
91
int8_t
exception_depth;
92
#endif
93
94
#if defined(CONFIG_ARM_STORE_EXC_RETURN) || defined(CONFIG_USERSPACE)
95
/*
96
* Status variable holding several thread status flags
97
* as follows:
98
*
99
* byte 0
100
* +-bits 4-7-----bit-3----------bit-2--------bit-1---+----bit-0------+
101
* : | | | | |
102
* : reserved |<Guard FLOAT>| reserved | reserved | <priv mode> |
103
* : bits | | | | CONTROL.nPRIV |
104
* +------------------------------------------------------------------+
105
*
106
* byte 1
107
* +----------------------------bits 8-15-----------------------------+
108
* : Least significant byte of EXC_RETURN |
109
* : bit 15| bit 14| bit 13 | bit 12| bit 11 | bit 10 | bit 9 | bit 8 |
110
* : Res | S | DCRS | FType | Mode | SPSel | Res | ES |
111
* +------------------------------------------------------------------+
112
*
113
* Bit 0: thread's current privileged mode (Supervisor or User mode)
114
* Mirrors CONTROL.nPRIV flag.
115
* Bit 2: Deprecated in favor of FType. Note: FType = !CONTROL.FPCA.
116
* indicating whether the thread has an active FP context.
117
* Mirrors CONTROL.FPCA flag.
118
* Bit 3: indicating whether the thread is applying the long (FLOAT)
119
* or the default MPU stack guard size.
120
*
121
* Bits 8-15: Least significant octet of the EXC_RETURN value when a
122
* thread is switched-out. The value is copied from LR when
123
* entering the PendSV handler. When the thread is
124
* switched in again, the value is restored to LR before
125
* exiting the PendSV handler.
126
*/
127
union
{
128
uint32_t
mode;
129
130
#if defined(CONFIG_ARM_STORE_EXC_RETURN)
131
struct
{
132
uint8_t
mode_bits;
133
uint8_t
mode_exc_return;
134
uint16_t
mode_reserved2;
135
};
136
#endif
137
};
138
139
#if defined(CONFIG_USERSPACE)
140
uint32_t
priv_stack_start;
141
uint32_t
priv_stack_end;
142
#if defined(CONFIG_CPU_AARCH32_CORTEX_R)
143
uint32_t
sp_usr;
144
#endif
145
#endif
146
#endif
147
148
#if defined(CONFIG_ARM_PAC_PER_THREAD)
149
struct
pac_keys pac_keys;
150
#endif
151
};
152
153
#if defined(CONFIG_FPU_SHARING) && defined(CONFIG_MPU_STACK_GUARD)
154
#define Z_ARM_MODE_MPU_GUARD_FLOAT_Msk (1 << 3)
155
#endif
156
typedef
struct
_thread_arch _thread_arch_t;
157
158
#endif
/* _ASMLANGUAGE */
159
160
#endif
/* ZEPHYR_INCLUDE_ARCH_ARM_THREAD_H_ */
types.h
uint32_t
__UINT32_TYPE__ uint32_t
Definition
stdint.h:90
uint8_t
__UINT8_TYPE__ uint8_t
Definition
stdint.h:88
uint16_t
__UINT16_TYPE__ uint16_t
Definition
stdint.h:89
int8_t
__INT8_TYPE__ int8_t
Definition
stdint.h:72
zephyr
arch
arm
thread.h
Generated on
for Zephyr API Documentation by
1.14.0