.. | .. |
---|
110 | 110 | |
---|
111 | 111 | static inline u8 rdfs8(addr_t addr) |
---|
112 | 112 | { |
---|
| 113 | + u8 *ptr = (u8 *)absolute_pointer(addr); |
---|
113 | 114 | u8 v; |
---|
114 | | - asm volatile("movb %%fs:%1,%0" : "=q" (v) : "m" (*(u8 *)addr)); |
---|
| 115 | + asm volatile("movb %%fs:%1,%0" : "=q" (v) : "m" (*ptr)); |
---|
115 | 116 | return v; |
---|
116 | 117 | } |
---|
117 | 118 | static inline u16 rdfs16(addr_t addr) |
---|
118 | 119 | { |
---|
| 120 | + u16 *ptr = (u16 *)absolute_pointer(addr); |
---|
119 | 121 | u16 v; |
---|
120 | | - asm volatile("movw %%fs:%1,%0" : "=r" (v) : "m" (*(u16 *)addr)); |
---|
| 122 | + asm volatile("movw %%fs:%1,%0" : "=r" (v) : "m" (*ptr)); |
---|
121 | 123 | return v; |
---|
122 | 124 | } |
---|
123 | 125 | static inline u32 rdfs32(addr_t addr) |
---|
124 | 126 | { |
---|
| 127 | + u32 *ptr = (u32 *)absolute_pointer(addr); |
---|
125 | 128 | u32 v; |
---|
126 | | - asm volatile("movl %%fs:%1,%0" : "=r" (v) : "m" (*(u32 *)addr)); |
---|
| 129 | + asm volatile("movl %%fs:%1,%0" : "=r" (v) : "m" (*ptr)); |
---|
127 | 130 | return v; |
---|
128 | 131 | } |
---|
129 | 132 | |
---|
130 | 133 | static inline void wrfs8(u8 v, addr_t addr) |
---|
131 | 134 | { |
---|
132 | | - asm volatile("movb %1,%%fs:%0" : "+m" (*(u8 *)addr) : "qi" (v)); |
---|
| 135 | + u8 *ptr = (u8 *)absolute_pointer(addr); |
---|
| 136 | + asm volatile("movb %1,%%fs:%0" : "+m" (*ptr) : "qi" (v)); |
---|
133 | 137 | } |
---|
134 | 138 | static inline void wrfs16(u16 v, addr_t addr) |
---|
135 | 139 | { |
---|
136 | | - asm volatile("movw %1,%%fs:%0" : "+m" (*(u16 *)addr) : "ri" (v)); |
---|
| 140 | + u16 *ptr = (u16 *)absolute_pointer(addr); |
---|
| 141 | + asm volatile("movw %1,%%fs:%0" : "+m" (*ptr) : "ri" (v)); |
---|
137 | 142 | } |
---|
138 | 143 | static inline void wrfs32(u32 v, addr_t addr) |
---|
139 | 144 | { |
---|
140 | | - asm volatile("movl %1,%%fs:%0" : "+m" (*(u32 *)addr) : "ri" (v)); |
---|
| 145 | + u32 *ptr = (u32 *)absolute_pointer(addr); |
---|
| 146 | + asm volatile("movl %1,%%fs:%0" : "+m" (*ptr) : "ri" (v)); |
---|
141 | 147 | } |
---|
142 | 148 | |
---|
143 | 149 | static inline u8 rdgs8(addr_t addr) |
---|
144 | 150 | { |
---|
| 151 | + u8 *ptr = (u8 *)absolute_pointer(addr); |
---|
145 | 152 | u8 v; |
---|
146 | | - asm volatile("movb %%gs:%1,%0" : "=q" (v) : "m" (*(u8 *)addr)); |
---|
| 153 | + asm volatile("movb %%gs:%1,%0" : "=q" (v) : "m" (*ptr)); |
---|
147 | 154 | return v; |
---|
148 | 155 | } |
---|
149 | 156 | static inline u16 rdgs16(addr_t addr) |
---|
150 | 157 | { |
---|
| 158 | + u16 *ptr = (u16 *)absolute_pointer(addr); |
---|
151 | 159 | u16 v; |
---|
152 | | - asm volatile("movw %%gs:%1,%0" : "=r" (v) : "m" (*(u16 *)addr)); |
---|
| 160 | + asm volatile("movw %%gs:%1,%0" : "=r" (v) : "m" (*ptr)); |
---|
153 | 161 | return v; |
---|
154 | 162 | } |
---|
155 | 163 | static inline u32 rdgs32(addr_t addr) |
---|
156 | 164 | { |
---|
| 165 | + u32 *ptr = (u32 *)absolute_pointer(addr); |
---|
157 | 166 | u32 v; |
---|
158 | | - asm volatile("movl %%gs:%1,%0" : "=r" (v) : "m" (*(u32 *)addr)); |
---|
| 167 | + asm volatile("movl %%gs:%1,%0" : "=r" (v) : "m" (*ptr)); |
---|
159 | 168 | return v; |
---|
160 | 169 | } |
---|
161 | 170 | |
---|
162 | 171 | static inline void wrgs8(u8 v, addr_t addr) |
---|
163 | 172 | { |
---|
164 | | - asm volatile("movb %1,%%gs:%0" : "+m" (*(u8 *)addr) : "qi" (v)); |
---|
| 173 | + u8 *ptr = (u8 *)absolute_pointer(addr); |
---|
| 174 | + asm volatile("movb %1,%%gs:%0" : "+m" (*ptr) : "qi" (v)); |
---|
165 | 175 | } |
---|
166 | 176 | static inline void wrgs16(u16 v, addr_t addr) |
---|
167 | 177 | { |
---|
168 | | - asm volatile("movw %1,%%gs:%0" : "+m" (*(u16 *)addr) : "ri" (v)); |
---|
| 178 | + u16 *ptr = (u16 *)absolute_pointer(addr); |
---|
| 179 | + asm volatile("movw %1,%%gs:%0" : "+m" (*ptr) : "ri" (v)); |
---|
169 | 180 | } |
---|
170 | 181 | static inline void wrgs32(u32 v, addr_t addr) |
---|
171 | 182 | { |
---|
172 | | - asm volatile("movl %1,%%gs:%0" : "+m" (*(u32 *)addr) : "ri" (v)); |
---|
| 183 | + u32 *ptr = (u32 *)absolute_pointer(addr); |
---|
| 184 | + asm volatile("movl %1,%%gs:%0" : "+m" (*ptr) : "ri" (v)); |
---|
173 | 185 | } |
---|
174 | 186 | |
---|
175 | 187 | /* Note: these only return true/false, not a signed return value! */ |
---|