Subversion Repositories Kolibri OS

Rev

Rev 365 | Rev 379 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 365 Rev 378
Line 104... Line 104...
104
           add eax, 0x1000
104
           add eax, 0x1000
105
           dec ecx
105
           dec ecx
106
           jnz .map_kernel_tabs
106
           jnz .map_kernel_tabs
107
 
107
 
Line 108... Line 108...
108
           mov dword [sys_pgdir+0x600], sys_pgdir+PG_SW
108
           mov dword [sys_pgdir+(page_tabs shr 20)], sys_pgdir+PG_SW
109
           ret
109
           ret
110
endp
110
endp
Line 111... Line 111...
111
 
111
 
112
align 4
112
align 4
Line 363... Line 363...
363
           shr ebx, 22
363
           shr ebx, 22
364
           mov eax, [phis_addr]
364
           mov eax, [phis_addr]
365
           and eax, not 0xFFF
365
           and eax, not 0xFFF
366
           or eax, PG_UW          ;+PG_NOCACHE
366
           or eax, PG_UW          ;+PG_NOCACHE
367
           mov dword [current_pgdir+ebx*4], eax
367
           mov dword [master_tab+ebx*4], eax
368
           mov eax, [lin_addr]
368
           mov eax, [lin_addr]
369
           shr eax, 10
369
           shr eax, 10
370
           add eax, page_tabs
370
           add eax, page_tabs
371
           invlpg [eax]
371
           invlpg [eax]
372
           pop ebx
372
           pop ebx
373
           ret
373
           ret
374
endp
374
endp
375
 
375
 
Line 376... Line 376...
376
align 4
376
align 4
377
proc init_LFB
377
proc init_LFB
-
 
378
           locals
-
 
379
             pg_count dd ?
-
 
380
           endl
-
 
381
 
378
           cmp dword [LFBAddress], -1
382
           cmp dword [LFBAddress], -1
379
           jne @f
383
           jne @f
380
           mov [0x2f0000+0x901c],byte 2
384
           mov [0x2f0000+0x901c],byte 2
381
           stdcall kernel_alloc, 0x280000
385
           stdcall kernel_alloc, 0x280000
382
           mov [LFBAddress], eax
386
           mov [LFBAddress], eax
Line 386... Line 390...
386
           jnz @f
390
           jnz @f
387
           mov [0x2f0000+0x901c],byte 2
391
           mov [0x2f0000+0x901c],byte 2
388
           ret
392
           ret
389
@@:
393
@@:
390
           call map_LFB
394
           mov edx, LFB_BASE
391
           ret
-
 
392
endp
-
 
393
 
-
 
394
align 4
-
 
395
proc map_LFB
-
 
396
           locals
-
 
397
             pg_count dd ?
-
 
398
           endl
-
 
399
 
-
 
400
           mov edi, [LFBSize]
-
 
401
           mov esi, [LFBAddress]
395
           mov esi, [LFBAddress]
402
           mov dword [exp_lfb+4], esi
396
           mov edi, [LFBSize]
-
 
397
           mov dword [exp_lfb+4], esi
403
 
398
 
Line 404... Line 399...
404
           shr edi, 12
399
           shr edi, 12
405
           mov [pg_count], edi
400
           mov [pg_count], edi
406
           shr edi, 10
401
           shr edi, 10
Line 407... Line 402...
407
 
402
 
408
           bt [cpu_caps], CAPS_PSE
403
           bt [cpu_caps], CAPS_PSE
409
           jnc .map_page_tables
-
 
410
           mov ebx, esi
404
           jnc .map_page_tables
411
           or esi, PG_LARGE+PG_UW
405
           or esi, PG_LARGE+PG_UW
412
           shr ebx, 20
406
           shr edx, 20
413
           mov ecx, ebx
407
           mov ecx, edx
414
@@:
408
@@:
415
           mov [sys_pgdir+ebx], esi
409
           mov [sys_pgdir+edx], esi
416
           add ebx, 4
410
           add edx, 4
417
           add esi, 0x00400000
411
           add esi, 0x00400000
418
           dec edi
412
           dec edi
Line 419... Line 413...
419
           jnz @B
413
           jnz @B
420
 
414
 
421
           bt [cpu_caps], CAPS_PGE
415
           bt [cpu_caps], CAPS_PGE
422
           jnc @F
416
           jnc @F
-
 
417
           or dword [sys_pgdir+ecx], PG_GLOBAL
423
           or dword [sys_pgdir+ecx], PG_GLOBAL
418
@@:
424
@@:
419
           mov dword [LFBAddress], LFB_BASE
425
           mov eax, cr3       ;flush TLB
420
           mov eax, cr3       ;flush TLB
Line 426... Line 421...
426
           mov cr3, eax
421
           mov cr3, eax
Line 427... Line 422...
427
           ret
422
           ret
428
 
423
 
429
.map_page_tables:
424
.map_page_tables:
430
 
425
 
431
@@:
426
@@:
432
           call alloc_page
427
           call alloc_page
Line 433... Line 428...
433
           stdcall map_page_table, esi, eax
428
           stdcall map_page_table, edx, eax
434
           add esi, 0x00400000
-
 
435
           dec edi
-
 
436
           jnz @B
429
           add esi, 0x00400000
437
 
430
           dec edi
438
           mov eax, [LFBAddress]
431
           jnz @B
439
           mov esi, eax
432
 
440
           shr esi, 10
-
 
441
           add esi, page_tabs
-
 
442
           or eax, PG_UW
-
 
443
           mov ecx, [pg_count]
-
 
444
           shr ecx, 2
-
 
445
.map:
-
 
446
           mov [esi], eax
-
 
447
           add eax, 0x1000
-
 
448
           mov [esi+4], eax
-
 
449
           add eax, 0x1000
-
 
450
           mov [esi+8], eax
-
 
451
           add eax, 0x1000
433
           mov eax, [LFBAddress]
Line -... Line 434...
-
 
434
           mov edi, page_tabs + (LFB_BASE shr 10)
452
           mov [esi+12], eax
435
           or eax, PG_UW
453
           add eax, 0x1000
436
           mov ecx, [pg_count]
Line 454... Line 437...
454
           add esi, 16
437
           cld
455
           sub ecx, 1
438
           rep stosd
Line 486... Line 469...
486
 
469
 
Line 487... Line 470...
487
           shr edi, 12
470
           shr edi, 12
488
           shr esi, 12
471
           shr esi, 12
489
@@:
472
@@:
490
           mov eax, [page_tabs+0x00181000+edi*4]
473
           mov eax, [app_page_tabs+edi*4]
491
           test eax, 1
474
           test eax, 1
492
           jz .next
475
           jz .next
493
           mov dword [page_tabs+0x00181000+edi*4], 2
476
           mov dword [app_page_tabs+edi*4], 2
494
           mov ebx, edi
477
           mov ebx, edi
495
           shl ebx, 12
478
           shl ebx, 12
496
           invlpg [ebx+std_application_base_address]
479
           invlpg [ebx+std_application_base_address]
497
           call free_page
480
           call free_page
Line 634... Line 617...
634
           inc [pg_data.pages_faults]
617
           inc [pg_data.pages_faults]
Line 635... Line 618...
635
 
618
 
Line 636... Line 619...
636
           mov ebx, [ebp-4]
619
           mov ebx, [ebp-4]
637
 
-
 
638
           cmp ebx, 0xe0000000
-
 
639
           jae .lfb_addr
-
 
640
 
620
 
Line 641... Line 621...
641
           cmp ebx, 0x60400000
621
           cmp ebx, 0x80000000
642
           jae .user_space
622
           jae .user_space
Line 643... Line 623...
643
 
623
 
644
           cmp ebx, master_tab+0x1000
624
           cmp ebx, app_page_tabs
Line -... Line 625...
-
 
625
           jae .alloc
-
 
626
 
-
 
627
           cmp ebx, page_tabs
645
           jae .alloc
628
           jae .tab_space
Line 646... Line 629...
646
 
629
 
647
           cmp ebx, 0x60000000
630
           cmp ebx, 0x7DC00000
648
           jae .tab_space
631
           jae .lfb_addr
Line 1073... Line 1056...
1073
           ret
1056
           ret
1074
@@:
1057
@@:
1075
           cmp eax, 17
1058
           cmp eax, 17
1076
           ja @f
1059
           ja @f
1077
           stdcall srv_handlerEx, ebx
1060
           call srv_handlerEx   ;ebx
1078
           mov [esp+36], eax
1061
           mov [esp+36], eax
1079
           ret
1062
           ret
1080
@@:
1063
@@:
1081
           cmp eax, 18
1064
           cmp eax, 18
1082
           ja @f
1065
           ja @f
1083
           mov ecx, [CURRENT_TASK]
1066
           mov ecx, [CURRENT_TASK]