source: rtems/cpukit/score/cpu/arm/include/rtems/score/cpuimpl.h @ e47a3b7

Last change on this file since e47a3b7 was e47a3b7, checked in by Joel Sherrill <joel@…>, on 02/16/22 at 22:54:29

score/cpu/arm: Change license to BSD-2

Updates #3053.

  • Property mode set to 100644
File size: 3.8 KB
Line 
1/* SPDX-License-Identifier: BSD-2-Clause */
2
3/**
4 * @file
5 *
6 * @brief CPU Port Implementation API
7 */
8
9/*
10 * Copyright (c) 2013, 2016 embedded brains GmbH
11 *
12 * Redistribution and use in source and binary forms, with or without
13 * modification, are permitted provided that the following conditions
14 * are met:
15 * 1. Redistributions of source code must retain the above copyright
16 *    notice, this list of conditions and the following disclaimer.
17 * 2. Redistributions in binary form must reproduce the above copyright
18 *    notice, this list of conditions and the following disclaimer in the
19 *    documentation and/or other materials provided with the distribution.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31 * POSSIBILITY OF SUCH DAMAGE.
32 */
33
34#ifndef _RTEMS_SCORE_CPUIMPL_H
35#define _RTEMS_SCORE_CPUIMPL_H
36
37#include <rtems/score/cpu.h>
38
39/**
40 * @defgroup RTEMSScoreCPUARM ARM
41 *
42 * @ingroup RTEMSScoreCPU
43 *
44 * @brief ARM Architecture Support
45 *
46 * @{
47 */
48
49#define CPU_PER_CPU_CONTROL_SIZE 0
50
51#ifdef ARM_MULTILIB_ARCH_V4
52
53#if defined(ARM_MULTILIB_VFP_D32)
54#define CPU_INTERRUPT_FRAME_SIZE 240
55#elif defined(ARM_MULTILIB_VFP)
56#define CPU_INTERRUPT_FRAME_SIZE 112
57#else
58#define CPU_INTERRUPT_FRAME_SIZE 40
59#endif
60
61#endif /* ARM_MULTILIB_ARCH_V4 */
62
63#ifndef ASM
64
65#ifdef __cplusplus
66extern "C" {
67#endif
68
69#ifdef ARM_MULTILIB_ARCH_V4
70
71typedef struct {
72#ifdef ARM_MULTILIB_VFP
73  uint32_t fpscr;
74#ifdef ARM_MULTILIB_VFP_D32
75  double d16;
76  double d17;
77  double d18;
78  double d19;
79  double d20;
80  double d21;
81  double d22;
82  double d23;
83  double d24;
84  double d25;
85  double d26;
86  double d27;
87  double d28;
88  double d29;
89  double d30;
90  double d31;
91#endif /* ARM_MULTILIB_VFP_D32 */
92  double d0;
93  double d1;
94  double d2;
95  double d3;
96  double d4;
97  double d5;
98  double d6;
99  double d7;
100#endif /* ARM_MULTILIB_VFP */
101#ifdef ARM_MULTILIB_HAS_STORE_RETURN_STATE
102  uint32_t r0;
103  uint32_t r1;
104  uint32_t r2;
105  uint32_t r3;
106  uint32_t r7;
107  uint32_t r9;
108  uint32_t r12;
109  uint32_t lr;
110  uint32_t return_pc;
111  uint32_t return_cpsr;
112#else /* ARM_MULTILIB_HAS_STORE_RETURN_STATE */
113  uint32_t r9;
114  uint32_t lr;
115  uint32_t r0;
116  uint32_t r1;
117  uint32_t r2;
118  uint32_t r3;
119  uint32_t return_pc;
120  uint32_t return_cpsr;
121  uint32_t r7;
122  uint32_t r12;
123#endif /* ARM_MULTILIB_HAS_STORE_RETURN_STATE */
124} CPU_Interrupt_frame;
125
126#ifdef RTEMS_SMP
127
128static inline struct Per_CPU_Control *_ARM_Get_current_per_CPU_control( void )
129{
130  struct Per_CPU_Control *cpu_self;
131
132  /* Use PL1 only Thread ID Register (TPIDRPRW) */
133  __asm__ volatile (
134    "mrc p15, 0, %0, c13, c0, 4"
135    : "=r" ( cpu_self )
136  );
137
138  return cpu_self;
139}
140
141#define _CPU_Get_current_per_CPU_control() _ARM_Get_current_per_CPU_control()
142
143#endif /* RTEMS_SMP */
144
145#endif /* ARM_MULTILIB_ARCH_V4 */
146
147RTEMS_NO_RETURN void _CPU_Fatal_halt( uint32_t source, CPU_Uint32ptr error );
148
149void _CPU_Context_volatile_clobber( uintptr_t pattern );
150
151void _CPU_Context_validate( uintptr_t pattern );
152
153RTEMS_INLINE_ROUTINE void _CPU_Instruction_illegal( void )
154{
155  __asm__ volatile ( "udf" );
156}
157
158RTEMS_INLINE_ROUTINE void _CPU_Instruction_no_operation( void )
159{
160  __asm__ volatile ( "nop" );
161}
162
163#ifdef __cplusplus
164}
165#endif
166
167#endif /* ASM */
168
169/** @} */
170
171#endif /* _RTEMS_SCORE_CPUIMPL_H */
Note: See TracBrowser for help on using the repository browser.