Subversion Repositories HelenOS-historic

Rev

Rev 348 | Rev 501 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 348 Rev 413
Line 80... Line 80...
80
        :"m"( port), "m" (b)
80
        :"m"( port), "m" (b)
81
        :"%rdx","%rax"
81
        :"%rdx","%rax"
82
        );
82
        );
83
}
83
}
84
 
84
 
85
/** Set priority level low
85
/** Enable interrupts.
86
 *
86
 *
87
 * Enable interrupts and return previous
87
 * Enable interrupts and return previous
88
 * value of EFLAGS.
88
 * value of EFLAGS.
-
 
89
 *
-
 
90
 * @return Old interrupt priority level.
89
 */
91
 */
90
static inline pri_t cpu_priority_low(void) {
92
static inline ipl_t interrupts_enable(void) {
91
    pri_t v;
93
    ipl_t v;
92
    __asm__ volatile (
94
    __asm__ volatile (
93
        "pushfq\n"
95
        "pushfq\n"
94
        "popq %0\n"
96
        "popq %0\n"
95
        "sti\n"
97
        "sti\n"
96
        : "=r" (v)
98
        : "=r" (v)
97
    );
99
    );
98
    return v;
100
    return v;
99
}
101
}
100
 
102
 
101
/** Set priority level high
103
/** Disable interrupts.
102
 *
104
 *
103
 * Disable interrupts and return previous
105
 * Disable interrupts and return previous
104
 * value of EFLAGS.
106
 * value of EFLAGS.
-
 
107
 *
-
 
108
 * @return Old interrupt priority level.
105
 */
109
 */
106
static inline pri_t cpu_priority_high(void) {
110
static inline ipl_t interrupts_disable(void) {
107
    pri_t v;
111
    ipl_t v;
108
    __asm__ volatile (
112
    __asm__ volatile (
109
        "pushfq\n"
113
        "pushfq\n"
110
        "popq %0\n"
114
        "popq %0\n"
111
        "cli\n"
115
        "cli\n"
112
        : "=r" (v)
116
        : "=r" (v)
113
        );
117
        );
114
    return v;
118
    return v;
115
}
119
}
116
 
120
 
117
/** Restore priority level
121
/** Restore interrupt priority level.
118
 *
122
 *
119
 * Restore EFLAGS.
123
 * Restore EFLAGS.
-
 
124
 *
-
 
125
 * @param ipl Saved interrupt priority level.
120
 */
126
 */
121
static inline void cpu_priority_restore(pri_t pri) {
127
static inline void interrupts_restore(ipl_t ipl) {
122
    __asm__ volatile (
128
    __asm__ volatile (
123
        "pushq %0\n"
129
        "pushq %0\n"
124
        "popfq\n"
130
        "popfq\n"
125
        : : "r" (pri)
131
        : : "r" (ipl)
126
        );
132
        );
127
}
133
}
128
 
134
 
129
/** Return raw priority level
135
/** Return interrupt priority level.
130
 *
136
 *
131
 * Return EFLAFS.
137
 * Return EFLAFS.
-
 
138
 *
-
 
139
 * @return Current interrupt priority level.
132
 */
140
 */
133
static inline pri_t cpu_priority_read(void) {
141
static inline ipl_t interrupts_read(void) {
134
    pri_t v;
142
    ipl_t v;
135
    __asm__ volatile (
143
    __asm__ volatile (
136
        "pushfq\n"
144
        "pushfq\n"
137
        "popq %0\n"
145
        "popq %0\n"
138
        : "=r" (v)
146
        : "=r" (v)
139
    );
147
    );