Rev 984 | Rev 1186 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 984 | Rev 1072 | ||
|---|---|---|---|
| Line 139... | Line 139... | ||
| 139 | : "=r" (v) |
139 | : "=r" (v) |
| 140 | ); |
140 | ); |
| 141 | return v; |
141 | return v; |
| 142 | } |
142 | } |
| 143 | 143 | ||
| 144 | /** Read CR0 |
- | |
| 145 | * |
- | |
| 146 | * Return value in CR0 |
- | |
| 147 | * |
- | |
| 148 | * @return Value read. |
- | |
| 149 | */ |
- | |
| 150 | static inline __u64 read_cr0(void) |
- | |
| 151 | { |
- | |
| 152 | __u64 v; |
- | |
| 153 | __asm__ volatile ("movq %%cr0,%0\n" : "=r" (v)); |
- | |
| 154 | return v; |
- | |
| 155 | } |
- | |
| 156 | - | ||
| 157 | /** Read CR2 |
- | |
| 158 | * |
- | |
| 159 | * Return value in CR2 |
- | |
| 160 | * |
- | |
| 161 | * @return Value read. |
- | |
| 162 | */ |
- | |
| 163 | static inline __u64 read_cr2(void) |
- | |
| 164 | { |
- | |
| 165 | __u64 v; |
- | |
| 166 | __asm__ volatile ("movq %%cr2,%0\n" : "=r" (v)); |
- | |
| 167 | return v; |
- | |
| 168 | } |
- | |
| 169 | - | ||
| 170 | /** Write CR3 |
- | |
| 171 | * |
- | |
| 172 | * Write value to CR3. |
- | |
| 173 | * |
- | |
| 174 | * @param v Value to be written. |
- | |
| 175 | */ |
- | |
| 176 | static inline void write_cr3(__u64 v) |
- | |
| 177 | { |
- | |
| 178 | __asm__ volatile ("movq %0,%%cr3\n" : : "r" (v)); |
- | |
| 179 | } |
- | |
| 180 | - | ||
| 181 | /** Read CR3 |
- | |
| 182 | * |
- | |
| 183 | * Return value in CR3 |
- | |
| 184 | * |
- | |
| 185 | * @return Value read. |
- | |
| 186 | */ |
- | |
| 187 | static inline __u64 read_cr3(void) |
- | |
| 188 | { |
- | |
| 189 | __u64 v; |
- | |
| 190 | __asm__ volatile ("movq %%cr3,%0" : "=r" (v)); |
- | |
| 191 | return v; |
- | |
| 192 | } |
- | |
| 193 | - | ||
| 194 | /** Write to MSR */ |
144 | /** Write to MSR */ |
| 195 | static inline void write_msr(__u32 msr, __u64 value) |
145 | static inline void write_msr(__u32 msr, __u64 value) |
| 196 | { |
146 | { |
| 197 | __asm__ volatile ( |
147 | __asm__ volatile ( |
| 198 | "wrmsr;" : : "c" (msr), |
148 | "wrmsr;" : : "c" (msr), |
| Line 248... | Line 198... | ||
| 248 | static inline void invlpg(__address addr) |
198 | static inline void invlpg(__address addr) |
| 249 | { |
199 | { |
| 250 | __asm__ volatile ("invlpg %0\n" :: "m" (*((__native *)addr))); |
200 | __asm__ volatile ("invlpg %0\n" :: "m" (*((__native *)addr))); |
| 251 | } |
201 | } |
| 252 | 202 | ||
| - | 203 | #define GEN_READ_REG(reg) static inline __native read_ ##reg (void) \ |
|
| - | 204 | { \ |
|
| - | 205 | __native res; \ |
|
| - | 206 | __asm__ volatile ("movq %%" #reg ", %0" : "=r" (res) ); \ |
|
| - | 207 | return res; \ |
|
| - | 208 | } |
|
| - | 209 | ||
| - | 210 | #define GEN_WRITE_REG(reg) static inline void write_ ##reg (__native regn) \ |
|
| - | 211 | { \ |
|
| - | 212 | __asm__ volatile ("movq %0, %%" #reg : : "r" (regn)); \ |
|
| - | 213 | } |
|
| - | 214 | ||
| - | 215 | GEN_READ_REG(cr0); |
|
| - | 216 | GEN_READ_REG(cr2); |
|
| - | 217 | GEN_READ_REG(cr3); |
|
| - | 218 | GEN_WRITE_REG(cr3); |
|
| - | 219 | ||
| - | 220 | GEN_READ_REG(dr0); |
|
| - | 221 | GEN_READ_REG(dr1); |
|
| - | 222 | GEN_READ_REG(dr2); |
|
| - | 223 | GEN_READ_REG(dr3); |
|
| - | 224 | GEN_READ_REG(dr6); |
|
| - | 225 | GEN_READ_REG(dr7); |
|
| - | 226 | ||
| - | 227 | GEN_WRITE_REG(dr0); |
|
| - | 228 | GEN_WRITE_REG(dr1); |
|
| - | 229 | GEN_WRITE_REG(dr2); |
|
| - | 230 | GEN_WRITE_REG(dr3); |
|
| - | 231 | GEN_WRITE_REG(dr6); |
|
| - | 232 | GEN_WRITE_REG(dr7); |
|
| - | 233 | ||
| - | 234 | ||
| 253 | extern size_t interrupt_handler_size; |
235 | extern size_t interrupt_handler_size; |
| 254 | extern void interrupt_handlers(void); |
236 | extern void interrupt_handlers(void); |
| 255 | 237 | ||
| 256 | #endif |
238 | #endif |