Rev 6321 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6321 | Rev 6661 | ||
---|---|---|---|
Line 158... | Line 158... | ||
158 | return c | 0x20; |
158 | return c | 0x20; |
159 | } |
159 | } |
Line 160... | Line -... | ||
160 | - | ||
161 | - | ||
162 | - | ||
163 | #define KMAP_MAX 256 |
- | |
164 | - | ||
165 | static struct mutex kmap_mutex; |
- | |
166 | static struct page* kmap_table[KMAP_MAX]; |
- | |
167 | static int kmap_av; |
- | |
168 | static int kmap_first; |
- | |
169 | static void* kmap_base; |
- | |
170 | - | ||
171 | - | ||
172 | int kmap_init() |
- | |
173 | { |
- | |
174 | kmap_base = AllocKernelSpace(KMAP_MAX*4096); |
- | |
175 | if(kmap_base == NULL) |
- | |
176 | return -1; |
- | |
177 | - | ||
178 | kmap_av = KMAP_MAX; |
- | |
179 | MutexInit(&kmap_mutex); |
- | |
180 | return 0; |
- | |
181 | }; |
- | |
182 | - | ||
183 | void *kmap(struct page *page) |
- | |
184 | { |
- | |
185 | void *vaddr = NULL; |
- | |
186 | int i; |
- | |
187 | - | ||
188 | do |
- | |
189 | { |
- | |
190 | MutexLock(&kmap_mutex); |
- | |
191 | if(kmap_av != 0) |
- | |
192 | { |
- | |
193 | for(i = kmap_first; i < KMAP_MAX; i++) |
- | |
194 | { |
- | |
195 | if(kmap_table[i] == NULL) |
- | |
196 | { |
- | |
197 | kmap_av--; |
- | |
198 | kmap_first = i; |
- | |
199 | kmap_table[i] = page; |
- | |
200 | vaddr = kmap_base + (i<<12); |
- | |
201 | MapPage(vaddr,(addr_t)page,3); |
- | |
202 | break; |
- | |
203 | }; |
- | |
204 | }; |
- | |
205 | }; |
- | |
206 | MutexUnlock(&kmap_mutex); |
- | |
207 | }while(vaddr == NULL); |
- | |
208 | - | ||
209 | return vaddr; |
- | |
210 | }; |
- | |
211 | - | ||
212 | void *kmap_atomic(struct page *page) __attribute__ ((alias ("kmap"))); |
- | |
213 | - | ||
214 | void kunmap(struct page *page) |
- | |
215 | { |
- | |
216 | void *vaddr; |
- | |
217 | int i; |
- | |
218 | - | ||
219 | MutexLock(&kmap_mutex); |
- | |
220 | - | ||
221 | for(i = 0; i < KMAP_MAX; i++) |
- | |
222 | { |
- | |
223 | if(kmap_table[i] == page) |
- | |
224 | { |
- | |
225 | kmap_av++; |
- | |
226 | if(i < kmap_first) |
- | |
227 | kmap_first = i; |
- | |
228 | kmap_table[i] = NULL; |
- | |
229 | vaddr = kmap_base + (i<<12); |
- | |
230 | MapPage(vaddr,0,0); |
- | |
231 | break; |
- | |
232 | }; |
- | |
233 | }; |
- | |
234 | - | ||
235 | MutexUnlock(&kmap_mutex); |
- | |
236 | }; |
- | |
237 | - | ||
238 | void kunmap_atomic(void *vaddr) |
- | |
239 | { |
- | |
240 | int i; |
- | |
241 | - | ||
242 | MapPage(vaddr,0,0); |
- | |
243 | - | ||
244 | i = (vaddr - kmap_base) >> 12; |
- | |
245 | - | ||
246 | MutexLock(&kmap_mutex); |
- | |
247 | - | ||
248 | kmap_av++; |
- | |
249 | if(i < kmap_first) |
- | |
250 | kmap_first = i; |
- | |
251 | kmap_table[i] = NULL; |
- | |
252 | 160 | ||
253 | MutexUnlock(&kmap_mutex); |
161 | |
254 | } |
162 | |
255 | void msleep(unsigned int msecs) |
163 | void msleep(unsigned int msecs) |
Line 889... | Line 797... | ||
889 | void vfree(const void *addr) |
797 | void vfree(const void *addr) |
890 | { |
798 | { |
891 | KernelFree(addr); |
799 | KernelFree(addr); |
892 | }>>>>>>30)); |
800 | } |
Line -... | Line 801... | ||
- | 801 | ||
- | 802 | ||
- | 803 | int set_memory_uc(unsigned long addr, int numpages) |
|
- | 804 | { |
|
- | 805 | return 0; |
|
- | 806 | }; |
|
- | 807 | ||
- | 808 | int set_memory_wb(unsigned long addr, int numpages) |
|
- | 809 | { |
|
- | 810 | return 0; |