Rev 1313 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1313 | Rev 2971 | ||
---|---|---|---|
Line -... | Line 1... | ||
- | 1 | #define ALLOC_FAST |
|
- | 2 | ||
1 | #include |
3 | #include |
2 | #include |
4 | #include |
3 | #include |
5 | #include |
4 | #include |
6 | #include |
5 | #include |
7 | #include |
Line 292... | Line 294... | ||
292 | 294 | ||
Line 293... | Line 295... | ||
293 | map = (mmap_t*)PA2KA(frame_alloc( (sizeof(mmap_t) + |
295 | map = (mmap_t*)PA2KA(frame_alloc( (sizeof(mmap_t) + |
294 | sizeof(addr_t) * pages) >> PAGE_WIDTH)); |
296 | sizeof(addr_t) * pages) >> PAGE_WIDTH)); |
Line 295... | Line -... | ||
295 | - | ||
296 | map->size = size; |
- | |
297 | 297 | ||
298 | if ( map ) |
298 | if ( map ) |
- | 299 | { |
|
- | 300 | map->size = size; |
|
299 | { |
301 | |
Line 300... | Line 302... | ||
300 | order = size >> HF_WIDTH; |
302 | order = size >> HF_WIDTH; |
301 | 303 | ||
Line 311... | Line 313... | ||
311 | ASSERT( frame ); |
313 | ASSERT( frame ); |
Line 312... | Line 314... | ||
312 | 314 | ||
313 | if( frame ) |
315 | if( frame ) |
314 | { |
- | |
315 | addr_t page = 0; |
316 | { |
Line 316... | Line 317... | ||
316 | addr_t mem; |
317 | addr_t mem; |
317 | 318 | ||
Line 340... | Line 341... | ||
340 | mem = heap; |
341 | mem = heap; |
Line 341... | Line 342... | ||
341 | 342 | ||
342 | if( flags & PG_MAP ) |
343 | if( flags & PG_MAP ) |
- | 344 | { |
|
Line 343... | Line 345... | ||
343 | { |
345 | addr_t page_frame; |
Line 344... | Line 346... | ||
344 | 346 | ||
345 | #ifdef ALLOC_IMM |
347 | #ifdef ALLOC_FAST |
346 | 348 | ||
347 | while( pages ) |
- | |
Line 348... | Line 349... | ||
348 | { |
349 | while( pages ) |
349 | u32_t order; |
350 | { |
Line 350... | Line 351... | ||
350 | addr_t page_frame; |
351 | u32_t order; |
Line 351... | Line 352... | ||
351 | 352 | ||
352 | asm volatile ("bsr %0, %1":"=&r"(order):"r"(tmp):"cc"); |
353 | asm volatile ("bsrl %1, %0":"=&r"(order):"r"(pages):"cc"); |
353 | asm volatile ("btr %0, %1" :"=r"(tmp):"r"(order):"cc"); |
354 | asm volatile ("btrl %1, %0" :"=&r"(pages):"r"(order):"cc"); |
354 | 355 | ||
Line 355... | Line 356... | ||
355 | page_frame = frame_alloc(1 << order) | (flags & 0xFFF); |
356 | page_frame = frame_alloc(1 << order) | (flags & 0xFFF); /* FIXME check */ |
356 | 357 | ||
- | 358 | for(i = 0; i < 1 << order; i++) |
|
357 | for(i = 0; i < 1 << order; i++) |
359 | { |
358 | { |
360 | *pte++ = 0; |
359 | *pte++ = 0; //page; |
361 | *mpte++ = page_frame; |
Line 360... | Line 362... | ||
360 | *mpte++ = page; |
362 | |
Line 361... | Line 363... | ||
361 | 363 | asm volatile ( "invlpg (%0)" ::"r" (mem) ); |
|
362 | asm volatile ( "invlpg (%0)" ::"r" (mem) ); |
364 | mem+= 4096; |
363 | mem+= 4096; |
365 | page_frame+= 4096; |
364 | }; |
366 | }; |
365 | } |
367 | } |
366 | #else |
368 | #else |
367 | 369 | ||
368 | page = PG_DEMAND | (flags & 0xFFF); |
370 | page_frame = PG_DEMAND | (flags & 0xFFF); |
369 | 371 | ||
370 | while(pages--) |
372 | while(pages--) |
371 | { |
373 | { |
372 | *pte++ = 0; |
374 | *pte++ = 0; |
373 | *mpte++ = page; |
375 | *mpte++ = page_frame; |
374 | asm volatile ( "invlpg (%0)" ::"r" (mem) ); |
376 | asm volatile ( "invlpg (%0)" ::"r" (mem) ); |
375 | mem+= 4096; |
377 | mem+= 4096; |
Line 376... | Line 378... | ||
376 | }; |
378 | }; |
377 | #endif |
379 | #endif |
378 | } |
380 | } |
379 | else |
381 | else |
Line 380... | Line -... | ||
380 | { |
- | |
381 | while(pages--) |
382 | { |
Line 382... | Line 383... | ||
382 | { |
383 | while(pages--) |
383 | *pte++ = 0; //page; |
384 | { |