Changeset 897ad60 in mainline
- Timestamp:
- 2006-04-13T16:11:27Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 39cea6a
- Parents:
- 963074b3
- Location:
- arch
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/include/asm.h
r963074b3 r897ad60 30 30 #define __amd64_ASM_H__ 31 31 32 #include <arch/pm.h> 32 33 #include <arch/types.h> 33 34 #include <config.h> … … 198 199 static inline void invlpg(__address addr) 199 200 { 200 __asm__ volatile ("invlpg %0\n" :: "m" (*((__native *)addr))); 201 __asm__ volatile ("invlpg %0\n" :: "m" (*((__native *)addr))); 202 } 203 204 /** Load GDTR register from memory. 205 * 206 * @param gdtr_reg Address of memory from where to load GDTR. 207 */ 208 static inline void gdtr_load(struct ptr_16_64 *gdtr_reg) 209 { 210 __asm__ volatile ("lgdt %0\n" : : "m" (*gdtr_reg)); 211 } 212 213 /** Store GDTR register to memory. 214 * 215 * @param gdtr_reg Address of memory to where to load GDTR. 216 */ 217 static inline void gdtr_store(struct ptr_16_64 *gdtr_reg) 218 { 219 __asm__ volatile ("sgdt %0\n" : : "m" (*gdtr_reg)); 220 } 221 222 /** Load IDTR register from memory. 223 * 224 * @param idtr_reg Address of memory from where to load IDTR. 225 */ 226 static inline void idtr_load(struct ptr_16_64 *idtr_reg) 227 { 228 __asm__ volatile ("lidt %0\n" : : "m" (*idtr_reg)); 229 } 230 231 /** Load TR from descriptor table. 232 * 233 * @param sel Selector specifying descriptor of TSS segment. 234 */ 235 static inline void tr_load(__u16 sel) 236 { 237 __asm__ volatile ("ltr %0" : : "r" (sel)); 201 238 } 202 239 -
arch/amd64/src/pm.c
r963074b3 r897ad60 216 216 gdt_tss_setlimit(&gdt_p[TSS_DES], sizeof(struct tss) - 1); 217 217 218 __asm__("lgdt %0" : : "m"(gdtr));219 __asm__("lidt %0" : : "m"(idtr));218 gdtr_load(&gdtr); 219 idtr_load(&idtr); 220 220 /* 221 221 * As of this moment, the current CPU has its own GDT pointing 222 222 * to its own TSS. We just need to load the TR register. 223 223 */ 224 __asm__("ltr %0" : : "r" ((__u16) gdtselector(TSS_DES)));225 } 224 tr_load(gdtselector(TSS_DES)); 225 } -
arch/ia32/include/asm.h
r963074b3 r897ad60 31 31 #define __ia32_ASM_H__ 32 32 33 #include <arch/pm.h> 33 34 #include <arch/types.h> 34 35 #include <config.h> … … 252 253 } 253 254 255 /** Load GDTR register from memory. 256 * 257 * @param gdtr_reg Address of memory from where to load GDTR. 258 */ 259 static inline void gdtr_load(struct ptr_16_32 *gdtr_reg) 260 { 261 __asm__ volatile ("lgdt %0\n" : : "m" (*gdtr_reg)); 262 } 263 264 /** Store GDTR register to memory. 265 * 266 * @param gdtr_reg Address of memory to where to load GDTR. 267 */ 268 static inline void gdtr_store(struct ptr_16_32 *gdtr_reg) 269 { 270 __asm__ volatile ("sgdt %0\n" : : "m" (*gdtr_reg)); 271 } 272 273 /** Load IDTR register from memory. 274 * 275 * @param idtr_reg Address of memory from where to load IDTR. 276 */ 277 static inline void idtr_load(struct ptr_16_32 *idtr_reg) 278 { 279 __asm__ volatile ("lidt %0\n" : : "m" (*idtr_reg)); 280 } 281 282 /** Load TR from descriptor table. 283 * 284 * @param sel Selector specifying descriptor of TSS segment. 285 */ 286 static inline void tr_load(__u16 sel) 287 { 288 __asm__ volatile ("ltr %0" : : "r" (sel)); 289 } 290 254 291 #endif -
arch/ia32/src/pm.c
r963074b3 r897ad60 179 179 idtr.limit = sizeof(idt); 180 180 idtr.base = (__address) idt; 181 __asm__ volatile ("lgdt %0\n" : : "m" (gdtr));182 __asm__ volatile ("lidt %0\n" : : "m" (idtr));181 gdtr_load(&gdtr); 182 idtr_load(&idtr); 183 183 184 184 /* … … 214 214 * to its own TSS. We just need to load the TR register. 215 215 */ 216 __asm__ volatile ("ltr %0" : : "r" ((__u16) selector(TSS_DES)));216 tr_load(selector(TSS_DES)); 217 217 218 218 clean_IOPL_NT_flags(); /* Disable I/O on nonprivileged levels */ … … 225 225 struct descriptor *gdt_p = (struct descriptor *) cpugdtr.base; 226 226 227 __asm__ volatile ("sgdt %0\n" : : "m" (cpugdtr)); 228 227 gdtr_store(&cpugdtr); 229 228 gdt_setbase(&gdt_p[TLS_DES], tls); 230 229 /* Reload gdt register to update GS in CPU */ 231 __asm__ volatile ("lgdt %0\n" : : "m" (cpugdtr));232 } 230 gdtr_load(&cpugdtr); 231 }
Note:
See TracChangeset
for help on using the changeset viewer.