Subversion Repositories HelenOS-historic

Rev

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