Rev 253 | Rev 342 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 253 | Rev 254 | ||
---|---|---|---|
Line 37... | Line 37... | ||
37 | * Enable interrupts and return previous |
37 | * Enable interrupts and return previous |
38 | * value of EE. |
38 | * value of EE. |
39 | */ |
39 | */ |
40 | static inline pri_t cpu_priority_low(void) { |
40 | static inline pri_t cpu_priority_low(void) { |
41 | pri_t v; |
41 | pri_t v; |
- | 42 | pri_t tmp; |
|
- | 43 | ||
42 | __asm__ volatile ( |
44 | __asm__ volatile ( |
43 | "mfmsr %0\n" |
45 | "mfmsr %0\n" |
44 | "mfmsr %%r31\n" |
46 | "mfmsr %1\n" |
45 | "ori %%r31, %%r31, 1 << 15\n" |
47 | "ori %1, %1, 1 << 15\n" |
46 | "mtmsr %%r31\n" |
48 | "mtmsr %1\n" |
47 | : "=r" (v) |
49 | : "=r" (v), "=r" (tmp) |
48 | : |
- | |
49 | : "%r31" |
- | |
50 | ); |
50 | ); |
51 | return v; |
51 | return v; |
52 | } |
52 | } |
53 | 53 | ||
54 | /** Set priority level high |
54 | /** Set priority level high |
Line 56... | Line 56... | ||
56 | * Disable interrupts and return previous |
56 | * Disable interrupts and return previous |
57 | * value of EE. |
57 | * value of EE. |
58 | */ |
58 | */ |
59 | static inline pri_t cpu_priority_high(void) { |
59 | static inline pri_t cpu_priority_high(void) { |
60 | pri_t v; |
60 | pri_t v; |
- | 61 | pri_t tmp; |
|
- | 62 | ||
61 | __asm__ volatile ( |
63 | __asm__ volatile ( |
62 | "mfmsr %0\n" |
64 | "mfmsr %0\n" |
63 | "mfmsr %%r31\n" |
65 | "mfmsr %1\n" |
64 | "rlwinm %%r31, %%r31, 0, 17, 15\n" |
66 | "rlwinm %1, %1, 0, 17, 15\n" |
65 | "mtmsr %%r31\n" |
67 | "mtmsr %1\n" |
66 | : "=r" (v) |
68 | : "=r" (v), "=r" (tmp) |
67 | : |
- | |
68 | : "%r31" |
- | |
69 | ); |
69 | ); |
70 | return v; |
70 | return v; |
71 | } |
71 | } |
72 | 72 | ||
73 | /** Restore priority level |
73 | /** Restore priority level |
74 | * |
74 | * |
75 | * Restore EE. |
75 | * Restore EE. |
76 | */ |
76 | */ |
77 | static inline void cpu_priority_restore(pri_t pri) { |
77 | static inline void cpu_priority_restore(pri_t pri) { |
- | 78 | pri_t tmp; |
|
- | 79 | ||
78 | __asm__ volatile ( |
80 | __asm__ volatile ( |
79 | "mfmsr %%r31\n" |
81 | "mfmsr %1\n" |
80 | "rlwimi %0, %%r31, 0, 17, 15\n" |
82 | "rlwimi %0, %1, 0, 17, 15\n" |
81 | "cmpw 0, %0, %%r31\n" |
83 | "cmpw 0, %0, %1\n" |
82 | "beq 0f\n" |
84 | "beq 0f\n" |
83 | "mtmsr %0\n" |
85 | "mtmsr %0\n" |
84 | "0:\n" |
86 | "0:\n" |
85 | : "=r" (pri) |
87 | : "=r" (pri), "=r" (tmp) |
86 | : "0" (pri) |
88 | : "0" (pri) |
87 | : "%r31" |
- | |
88 | ); |
89 | ); |
89 | } |
90 | } |
90 | 91 | ||
91 | /** Return raw priority level |
92 | /** Return raw priority level |
92 | * |
93 | * |
Line 114... | Line 115... | ||
114 | __asm__ volatile ("and %0, %%r1, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1))); |
115 | __asm__ volatile ("and %0, %%r1, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1))); |
115 | 116 | ||
116 | return v; |
117 | return v; |
117 | } |
118 | } |
118 | 119 | ||
- | 120 | void cpu_halt(void); |
|
119 | void cpu_sleep(void); |
121 | void cpu_sleep(void); |
120 | void asm_delay_loop(__u32 t); |
122 | void asm_delay_loop(__u32 t); |
121 | 123 | ||
122 | #endif |
124 | #endif |