1 /*
2  * Copyright (c) 2019-2020 Cobham Gaisler AB
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief Per-arch thread definition
10  *
11  * This file contains definitions for
12  *
13  *  struct _thread_arch
14  *  struct _callee_saved
15  *
16  * necessary to instantiate instances of struct k_thread.
17  */
18 
19 #ifndef ZEPHYR_INCLUDE_ARCH_SPARC_THREAD_H_
20 #define ZEPHYR_INCLUDE_ARCH_SPARC_THREAD_H_
21 
22 #ifndef _ASMLANGUAGE
23 #include <zephyr/types.h>
24 
25 /*
26  * The following structure defines the list of registers that need to be
27  * saved/restored when a cooperative context switch occurs.
28  */
29 struct _callee_saved {
30 	/* y register used by mul/div */
31 	uint32_t y;
32 
33 	/* processor status register */
34 	uint32_t psr;
35 
36 	/*
37 	 * local registers
38 	 *
39 	 * Using uint64_t l0_and_l1 will put everything in this structure on a
40 	 * double word boundary which allows us to use double word loads and
41 	 * stores safely in the context switch.
42 	 */
43 	uint64_t l0_and_l1;
44 	uint32_t l2;
45 	uint32_t l3;
46 	uint32_t l4;
47 	uint32_t l5;
48 	uint32_t l6;
49 	uint32_t l7;
50 
51 	/* input registers */
52 	uint32_t i0;
53 	uint32_t i1;
54 	uint32_t i2;
55 	uint32_t i3;
56 	uint32_t i4;
57 	uint32_t i5;
58 	uint32_t i6; /* frame pointer */
59 	uint32_t i7;
60 
61 	/* output registers */
62 	uint32_t o6; /* stack pointer */
63 	uint32_t o7;
64 
65 };
66 typedef struct _callee_saved _callee_saved_t;
67 
68 struct _thread_arch {
69 	/* empty */
70 };
71 
72 typedef struct _thread_arch _thread_arch_t;
73 
74 #endif  /* _ASMLANGUAGE */
75 
76 #endif  /* ZEPHYR_INCLUDE_ARCH_SPARC_THREAD_H_ */
77