Subversion Repositories HelenOS

Rev

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