Rev 3386 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3386 | Rev 4153 | ||
|---|---|---|---|
| Line 24... | Line 24... | ||
| 24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
| 26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 27 | */ |
27 | */ |
| 28 | 28 | ||
| 29 | /** @addtogroup arm32 |
29 | /** @addtogroup arm32 |
| 30 | * @{ |
30 | * @{ |
| 31 | */ |
31 | */ |
| 32 | /** @file |
32 | /** @file |
| 33 | * @brief Declarations of functions implemented in assembly. |
33 | * @brief Declarations of functions implemented in assembly. |
| 34 | */ |
34 | */ |
| 35 | 35 | ||
| 36 | #ifndef KERN_arm32_ASM_H_ |
36 | #ifndef KERN_arm32_ASM_H_ |
| 37 | #define KERN_arm32_ASM_H_ |
37 | #define KERN_arm32_ASM_H_ |
| 38 | 38 | ||
| - | 39 | #include <typedefs.h> |
|
| 39 | #include <arch/types.h> |
40 | #include <arch/types.h> |
| 40 | #include <arch/stack.h> |
41 | #include <arch/stack.h> |
| 41 | #include <config.h> |
42 | #include <config.h> |
| 42 | #include <arch/interrupt.h> |
43 | #include <arch/interrupt.h> |
| 43 | 44 | ||
| 44 | /** No such instruction on ARM to sleep CPU. */ |
45 | /** No such instruction on ARM to sleep CPU. */ |
| 45 | static inline void cpu_sleep(void) |
46 | static inline void cpu_sleep(void) |
| 46 | { |
47 | { |
| 47 | } |
48 | } |
| 48 | 49 | ||
| - | 50 | static inline void pio_write_8(ioport8_t *port, uint8_t v) |
|
| - | 51 | { |
|
| - | 52 | *port = v; |
|
| - | 53 | } |
|
| - | 54 | ||
| - | 55 | static inline void pio_write_16(ioport16_t *port, uint16_t v) |
|
| - | 56 | { |
|
| - | 57 | *port = v; |
|
| - | 58 | } |
|
| - | 59 | ||
| - | 60 | static inline void pio_write_32(ioport32_t *port, uint32_t v) |
|
| - | 61 | { |
|
| - | 62 | *port = v; |
|
| - | 63 | } |
|
| - | 64 | ||
| - | 65 | static inline uint8_t pio_read_8(ioport8_t *port) |
|
| - | 66 | { |
|
| - | 67 | return *port; |
|
| - | 68 | } |
|
| - | 69 | ||
| - | 70 | static inline uint16_t pio_read_16(ioport16_t *port) |
|
| - | 71 | { |
|
| - | 72 | return *port; |
|
| - | 73 | } |
|
| - | 74 | ||
| - | 75 | static inline uint32_t pio_read_32(ioport32_t *port) |
|
| - | 76 | { |
|
| - | 77 | return *port; |
|
| - | 78 | } |
|
| - | 79 | ||
| 49 | /** Return base address of current stack. |
80 | /** Return base address of current stack. |
| 50 | * |
81 | * |
| 51 | * Return the base address of the current stack. |
82 | * Return the base address of the current stack. |
| 52 | * The stack is assumed to be STACK_SIZE bytes long. |
83 | * The stack is assumed to be STACK_SIZE bytes long. |
| 53 | * The stack must start on page boundary. |
84 | * The stack must start on page boundary. |
| - | 85 | * |
|
| 54 | */ |
86 | */ |
| 55 | static inline uintptr_t get_stack_base(void) |
87 | static inline uintptr_t get_stack_base(void) |
| 56 | { |
88 | { |
| 57 | uintptr_t v; |
89 | uintptr_t v; |
| 58 | asm volatile ( |
90 | asm volatile ( |
| 59 | "and %0, sp, %1\n" |
91 | "and %[v], sp, %[size]\n" |
| 60 | : "=r" (v) |
92 | : [v] "=r" (v) |
| 61 | : "r" (~(STACK_SIZE - 1)) |
93 | : [size] "r" (~(STACK_SIZE - 1)) |
| 62 | ); |
94 | ); |
| 63 | return v; |
95 | return v; |
| 64 | } |
96 | } |
| 65 | 97 | ||
| 66 | extern void cpu_halt(void); |
98 | extern void cpu_halt(void); |