Rev 4344 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4344 | Rev 4345 | ||
---|---|---|---|
Line 34... | Line 34... | ||
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 | ||
Line 79... | Line 80... | ||
79 | /** Return base address of current stack. |
80 | /** Return base address of current stack. |
80 | * |
81 | * |
81 | * Return the base address of the current stack. |
82 | * Return the base address of the current stack. |
82 | * The stack is assumed to be STACK_SIZE bytes long. |
83 | * The stack is assumed to be STACK_SIZE bytes long. |
83 | * The stack must start on page boundary. |
84 | * The stack must start on page boundary. |
- | 85 | * |
|
84 | */ |
86 | */ |
85 | static inline uintptr_t get_stack_base(void) |
87 | static inline uintptr_t get_stack_base(void) |
86 | { |
88 | { |
87 | uintptr_t v; |
89 | uintptr_t v; |
88 | asm volatile ( |
90 | asm volatile ( |
89 | "and %0, sp, %1\n" |
91 | "and %[v], sp, %[size]\n" |
90 | : "=r" (v) |
92 | : [v] "=r" (v) |
91 | : "r" (~(STACK_SIZE - 1)) |
93 | : [size] "r" (~(STACK_SIZE - 1)) |
92 | ); |
94 | ); |
93 | return v; |
95 | return v; |
94 | } |
96 | } |
95 | 97 | ||
96 | extern void cpu_halt(void); |
98 | extern void cpu_halt(void); |