Subversion Repositories Kolibri OS

Rev

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
                {