Rev 2692 | Rev 2713 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2692 | Rev 2703 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | 1 | ||
2 | # Copyright (c) 2005 Ondrej Palkovsky |
2 | # Copyright (c) 2005 Ondrej Palkovsky |
3 | # Copyright (c) 2006 Martin Decky |
3 | # Copyright (c) 2006 Martin Decky |
- | 4 | # Copyright (c) 2008 Jakub Jermar |
|
4 | # All rights reserved. |
5 | # All rights reserved. |
5 | # |
6 | # |
6 | # Redistribution and use in source and binary forms, with or without |
7 | # Redistribution and use in source and binary forms, with or without |
7 | # modification, are permitted provided that the following conditions |
8 | # modification, are permitted provided that the following conditions |
8 | # are met: |
9 | # are met: |
Line 52... | Line 53... | ||
52 | .long 0 |
53 | .long 0 |
53 | .long multiboot_image_start |
54 | .long multiboot_image_start |
54 | 55 | ||
55 | multiboot_image_start: |
56 | multiboot_image_start: |
56 | movl $START_STACK, %esp # initialize stack pointer |
57 | movl $START_STACK, %esp # initialize stack pointer |
57 | lgdt bootstrap_gdtr # initialize Global Descriptor Table register |
58 | lgdtl bootstrap_gdtr # initialize Global Descriptor Table register |
58 | 59 | ||
59 | movw $gdtselector(KDATA_DES), %cx |
60 | movw $gdtselector(KDATA_DES), %cx |
60 | movw %cx, %es |
61 | movw %cx, %es |
61 | movw %cx, %ds # kernel data + stack |
62 | movw %cx, %ds # kernel data + stack |
62 | movw %cx, %ss |
63 | movw %cx, %ss |
Line 597... | Line 598... | ||
597 | outb %al, %dx |
598 | outb %al, %dx |
598 | 599 | ||
599 | cli |
600 | cli |
600 | hlt |
601 | hlt |
601 | 602 | ||
- | 603 | ||
602 | .section K_DATA_START, "aw", @progbits |
604 | .section K_INI_PTLS, "aw", @progbits |
- | 605 | ||
- | 606 | # |
|
- | 607 | # Macro for generating initial page table contents. |
|
- | 608 | # @param cnt Number of entries to generat. Must be multiple of 8. |
|
- | 609 | # @param g Number of GB that will be added to the mapping. |
|
- | 610 | # |
|
- | 611 | .macro ptl2gen cnt g |
|
- | 612 | .if \cnt |
|
- | 613 | ptl2gen "\cnt - 8" \g |
|
- | 614 | .quad ((\cnt - 8) * 0x200000) + (\g * 1024 * 1024 * 1024) | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
|
- | 615 | .quad ((\cnt - 7) * 0x200000) + (\g * 1024 * 1024 * 1024) | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
|
- | 616 | .quad ((\cnt - 6) * 0x200000) + (\g * 1024 * 1024 * 1024) | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
|
- | 617 | .quad ((\cnt - 5) * 0x200000) + (\g * 1024 * 1024 * 1024) | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
|
- | 618 | .quad ((\cnt - 4) * 0x200000) + (\g * 1024 * 1024 * 1024) | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
|
- | 619 | .quad ((\cnt - 3) * 0x200000) + (\g * 1024 * 1024 * 1024) | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
|
- | 620 | .quad ((\cnt - 2) * 0x200000) + (\g * 1024 * 1024 * 1024) | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
|
- | 621 | .quad ((\cnt - 1) * 0x200000) + (\g * 1024 * 1024 * 1024) | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
|
- | 622 | .endif |
|
- | 623 | .endm |
|
- | 624 | ||
- | 625 | # Page table for pages in the first gigabyte. |
|
603 | .align 4096 |
626 | .align 4096 |
- | 627 | .global ptl_2_0g |
|
- | 628 | ptl_2_0g: |
|
- | 629 | ptl2gen 512 0 |
|
604 | 630 | ||
605 | # Identical mapping of first 64MB and the same of -2GB -> 0 |
631 | # Page table for pages in the second gigabyte. |
- | 632 | .align 4096 |
|
606 | .global ptl_2 |
633 | .global ptl_2_1g |
607 | ptl_2: |
634 | ptl_2_1g: |
608 | .quad 0x0 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
635 | ptl2gen 512 1 |
609 | .quad 0x200000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
610 | .quad 0x400000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
611 | .quad 0x600000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
612 | .quad 0x800000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
613 | .quad 0xa00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
614 | .quad 0xc00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
- | 636 | ||
615 | .quad 0xe00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
637 | # Page table for pages in the third gigabyte. |
616 | .quad 0x1000000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
617 | .quad 0x1200000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
618 | .quad 0x1400000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
638 | .align 4096 |
619 | .quad 0x1600000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
620 | .quad 0x1800000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
621 | .quad 0x1a00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
639 | .global ptl_2_2g |
622 | .quad 0x1c00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
623 | .quad 0x1e00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
624 | .quad 0x2000000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
625 | .quad 0x2200000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
626 | .quad 0x2400000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
627 | .quad 0x2600000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
628 | .quad 0x2800000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
629 | .quad 0x2a00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
640 | ptl_2_2g: |
630 | .quad 0x2c00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
641 | ptl2gen 512 2 |
- | 642 | ||
631 | .quad 0x2e00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
643 | # Page table for pages in the fourth gigabyte. |
632 | .quad 0x3000000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
633 | .quad 0x3200000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
634 | .quad 0x3400000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
644 | .align 4096 |
635 | .quad 0x3600000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
636 | .quad 0x3800000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
- | |
637 | .quad 0x3a00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
645 | .global ptl_2_3g |
638 | .quad 0x3c00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
646 | ptl_2_3g: |
639 | .quad 0x3e00000 | (PTL_WRITABLE | PTL_PRESENT | PTL_2MB_PAGE) |
647 | ptl2gen 512 3 |
640 | 648 | ||
641 | .align 4096 |
649 | .align 4096 |
642 | .global ptl_1 |
650 | .global ptl_1 |
643 | ptl_1: |
651 | ptl_1: |
- | 652 | # Identity mapping for [0; 4G) |
|
644 | .quad ptl_2 + (PTL_WRITABLE | PTL_PRESENT) |
653 | .quad ptl_2_0g + (PTL_WRITABLE | PTL_PRESENT) |
- | 654 | .quad ptl_2_1g + (PTL_WRITABLE | PTL_PRESENT) |
|
- | 655 | .quad ptl_2_2g + (PTL_WRITABLE | PTL_PRESENT) |
|
- | 656 | .quad ptl_2_3g + (PTL_WRITABLE | PTL_PRESENT) |
|
645 | .fill 509,8,0 |
657 | .fill 506, 8, 0 |
- | 658 | # Mapping of [0; 1G) at -2G |
|
646 | .quad ptl_2 + (PTL_WRITABLE | PTL_PRESENT) |
659 | .quad ptl_2_0g + (PTL_WRITABLE | PTL_PRESENT) |
647 | .fill 1,8,0 |
660 | .fill 1, 8, 0 |
648 | 661 | ||
649 | .align 4096 |
662 | .align 4096 |
650 | .global ptl_0 |
663 | .global ptl_0 |
651 | ptl_0: |
664 | ptl_0: |
Line 653... | Line 666... | ||
653 | .fill 255,8,0 |
666 | .fill 255,8,0 |
654 | .quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT) |
667 | .quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT) |
655 | .fill 254,8,0 |
668 | .fill 254,8,0 |
656 | .quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT) |
669 | .quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT) |
657 | 670 | ||
- | 671 | .section K_DATA_START, "aw", @progbits |
|
- | 672 | ||
658 | .global bootstrap_gdtr |
673 | .global bootstrap_gdtr |
659 | bootstrap_gdtr: |
674 | bootstrap_gdtr: |
660 | .word gdtselector(GDT_ITEMS) |
675 | .word gdtselector(GDT_ITEMS) |
661 | .long KA2PA(gdt) |
676 | .long KA2PA(gdt) |
662 | 677 |