Changeset 18e0a6c in mainline for arch/ia32/include/asm.h
- Timestamp:
- 2005-06-09T23:43:45Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 74df77d
- Parents:
- d896525
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia32/include/asm.h
rd896525 r18e0a6c 38 38 39 39 extern void paging_on(void); 40 extern __address cpu_read_dba(void);41 extern void cpu_write_dba(__address dba);42 43 extern __address cpu_read_cr2(void);44 40 45 41 extern void interrupt_handlers(void); … … 55 51 extern void enable_l_apic_in_msr(void); 56 52 57 extern void halt_cpu(void); 58 extern void cpu_sleep(void); 53 /** Halt CPU 54 * 55 * Halt the current CPU until interrupt event. 56 */ 57 static inline void cpu_halt(void) { __asm__("hlt"); }; 58 static inline void cpu_sleep(void) { __asm__("hlt"); }; 59 59 60 static inline void write_dr0(__u32 v); 61 static inline __u32 read_dr0(void); 60 /** Read CR2 61 * 62 * Return value in CR2 63 * 64 * @return Value read. 65 */ 66 static inline __u32 read_cr2(void) { __u32 v; __asm__ volatile ("movl %%cr2,%0" : "=r" (v)); return v; } 62 67 63 inline void write_dr0(__u32 v) { __asm__ volatile ("movl %0,%%dr0\n" : : "r" (v)); } 64 inline __u32 read_dr0(void) { __u32 v; __asm__ volatile ("movl %%dr0,%0" : "=r" (v)); return v; } 68 /** Write CR3 69 * 70 * Write value to CR3. 71 * 72 * @param v Value to be written. 73 */ 74 static inline void write_cr3(__u32 v) { __asm__ volatile ("movl %0,%%cr3\n" : : "r" (v)); } 75 76 /** Read CR3 77 * 78 * Return value in CR3 79 * 80 * @return Value read. 81 */ 82 static inline __u32 read_cr3(void) { __u32 v; __asm__ volatile ("movl %%cr3,%0" : "=r" (v)); return v; } 83 84 /** Write DR0 85 * 86 * Write value to DR0. 87 * 88 * @param v Value to be written. 89 */ 90 static inline void write_dr0(__u32 v) { __asm__ volatile ("movl %0,%%dr0\n" : : "r" (v)); } 91 92 /** Read DR0 93 * 94 * Return value in DR0 95 * 96 * @return Value read. 97 */ 98 static inline __u32 read_dr0(void) { __u32 v; __asm__ volatile ("movl %%dr0,%0" : "=r" (v)); return v; } 99 100 /** Set priority level low 101 * 102 * Enable interrupts and return previous 103 * value of EFLAGS. 104 */ 105 static inline pri_t cpu_priority_low(void) { 106 pri_t v; 107 __asm__ volatile ( 108 "pushf\n" 109 "popl %0\n" 110 "sti\n" 111 : "=r" (v) 112 ); 113 return v; 114 } 115 116 /** Set priority level high 117 * 118 * Disable interrupts and return previous 119 * value of EFLAGS. 120 */ 121 static inline pri_t cpu_priority_high(void) { 122 pri_t v; 123 __asm__ volatile ( 124 "pushf\n" 125 "popl %0\n" 126 "cli\n" 127 : "=r" (v) 128 ); 129 return v; 130 } 131 132 /** Restore priority level 133 * 134 * Restore EFLAGS. 135 */ 136 static inline void cpu_priority_restore(pri_t pri) { 137 __asm__ volatile ( 138 "pushl %0\n" 139 "popf\n" 140 : : "r" (pri) 141 ); 142 } 143 144 /** Return raw priority level 145 * 146 * Return EFLAFS. 147 */ 148 static inline pri_t cpu_priority_read(void) { 149 pri_t v; 150 __asm__ volatile ( 151 "pushf\n" 152 "popl %0\n" 153 : "=r" (v) 154 ); 155 return v; 156 } 65 157 66 158 #endif
Note:
See TracChangeset
for help on using the changeset viewer.