Rev 365 | 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] |