Rev 5351 | Rev 5359 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5351 | Rev 5356 | ||
---|---|---|---|
Line 69... | Line 69... | ||
69 | format binary as "mnt" |
69 | format binary as "mnt" |
Line 70... | Line 70... | ||
70 | 70 | ||
71 | include 'macros.inc' |
71 | include 'macros.inc' |
Line 72... | Line 72... | ||
72 | include 'struct.inc' |
72 | include 'struct.inc' |
Line 73... | Line 73... | ||
73 | 73 | ||
74 | $Revision: 5351 $ |
74 | $Revision: 5356 $ |
Line 573... | Line 573... | ||
573 | mov ecx, MSR_AMD_STAR |
573 | mov ecx, MSR_AMD_STAR |
574 | wrmsr |
574 | wrmsr |
575 | .noSYSCALL: |
575 | .noSYSCALL: |
576 | ; ----------------------------------------- |
576 | ; ----------------------------------------- |
577 | stdcall alloc_page |
577 | stdcall alloc_page |
578 | stdcall map_page, tss-0xF80, eax, PG_SW |
578 | stdcall map_page, tss-0xF80, eax, PG_SWR |
579 | stdcall alloc_page |
579 | stdcall alloc_page |
580 | stdcall map_page, tss+0x80, eax, PG_SW |
580 | stdcall map_page, tss+0x80, eax, PG_SWR |
581 | stdcall alloc_page |
581 | stdcall alloc_page |
582 | stdcall map_page, tss+0x1080, eax, PG_SW |
582 | stdcall map_page, tss+0x1080, eax, PG_SWR |
Line 583... | Line 583... | ||
583 | 583 | ||
Line 584... | Line 584... | ||
584 | ; LOAD IDT |
584 | ; LOAD IDT |
585 | 585 | ||
Line 752... | Line 752... | ||
752 | mov [cr4_ap+OS_BASE], eax |
752 | mov [cr4_ap+OS_BASE], eax |
753 | mov esi, OS_BASE + ap_init16 |
753 | mov esi, OS_BASE + ap_init16 |
754 | mov edi, OS_BASE + 8000h |
754 | mov edi, OS_BASE + 8000h |
755 | mov ecx, (ap_init16_size + 3) / 4 |
755 | mov ecx, (ap_init16_size + 3) / 4 |
756 | rep movsd |
756 | rep movsd |
757 | stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW+PG_NOCACHE |
757 | stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SWR+PG_NOCACHE |
758 | mov [LAPIC_BASE], eax |
758 | mov [LAPIC_BASE], eax |
759 | lea edi, [eax+300h] |
759 | lea edi, [eax+300h] |
760 | mov esi, smpt+4 |
760 | mov esi, smpt+4 |
761 | dec ebx |
761 | dec ebx |
762 | .wake_cpus_loop: |
762 | .wake_cpus_loop: |
Line 1057... | Line 1057... | ||
1057 | call load_default_skin |
1057 | call load_default_skin |
Line 1058... | Line 1058... | ||
1058 | 1058 | ||
Line 1059... | Line 1059... | ||
1059 | ;protect io permission map |
1059 | ;protect io permission map |
1060 | 1060 | ||
1061 | mov esi, [default_io_map] |
1061 | mov esi, [default_io_map] |
1062 | stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map], PG_MAP |
1062 | stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map], PG_READ |
Line 1063... | Line 1063... | ||
1063 | add esi, 0x1000 |
1063 | add esi, 0x1000 |
1064 | stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map+4], PG_MAP |
1064 | stdcall map_page, esi, [SLOT_BASE+256+APPDATA.io_map+4], PG_READ |
1065 | 1065 | ||
1066 | stdcall map_page, tss._io_map_0, \ |
1066 | stdcall map_page, tss._io_map_0, \ |
Line 1067... | Line 1067... | ||
1067 | [SLOT_BASE+256+APPDATA.io_map], PG_MAP |
1067 | [SLOT_BASE+256+APPDATA.io_map], PG_READ |
1068 | stdcall map_page, tss._io_map_1, \ |
1068 | stdcall map_page, tss._io_map_1, \ |
1069 | [SLOT_BASE+256+APPDATA.io_map+4], PG_MAP |
1069 | [SLOT_BASE+256+APPDATA.io_map+4], PG_READ |
1070 | 1070 | ||
Line 2800... | Line 2800... | ||
2800 | call free_page |
2800 | call free_page |
2801 | ;-------------------------------------- |
2801 | ;-------------------------------------- |
2802 | align 4 |
2802 | align 4 |
2803 | @@: |
2803 | @@: |
2804 | mov eax, [page_tabs+esi*4] |
2804 | mov eax, [page_tabs+esi*4] |
2805 | or al, PG_UW |
2805 | or al, PG_UWR |
2806 | mov [page_tabs+ebx*4], eax |
2806 | mov [page_tabs+ebx*4], eax |
2807 | mov eax, ebx |
2807 | mov eax, ebx |
2808 | shl eax, 12 |
2808 | shl eax, 12 |
2809 | invlpg [eax] |
2809 | invlpg [eax] |
2810 | inc ebx |
2810 | inc ebx |
Line 5652... | Line 5652... | ||
5652 | call scan_rsdp |
5652 | call scan_rsdp |
5653 | jc no_acpi_power_off |
5653 | jc no_acpi_power_off |
5654 | .rsdp_found: |
5654 | .rsdp_found: |
5655 | mov esi, [eax+16] ; esi contains physical address of the RSDT |
5655 | mov esi, [eax+16] ; esi contains physical address of the RSDT |
5656 | mov ebp, [ipc_tmp] |
5656 | mov ebp, [ipc_tmp] |
5657 | stdcall map_page, ebp, esi, PG_MAP |
5657 | stdcall map_page, ebp, esi, PG_READ |
5658 | lea eax, [esi+1000h] |
5658 | lea eax, [esi+1000h] |
5659 | lea edx, [ebp+1000h] |
5659 | lea edx, [ebp+1000h] |
5660 | stdcall map_page, edx, eax, PG_MAP |
5660 | stdcall map_page, edx, eax, PG_READ |
5661 | and esi, 0xFFF |
5661 | and esi, 0xFFF |
5662 | add esi, ebp |
5662 | add esi, ebp |
5663 | cmp dword [esi], 'RSDT' |
5663 | cmp dword [esi], 'RSDT' |
5664 | jnz no_acpi_power_off |
5664 | jnz no_acpi_power_off |
5665 | mov ecx, [esi+4] |
5665 | mov ecx, [esi+4] |
Line 5669... | Line 5669... | ||
5669 | add esi, 24h |
5669 | add esi, 24h |
5670 | .scan_fadt: |
5670 | .scan_fadt: |
5671 | lodsd |
5671 | lodsd |
5672 | mov ebx, eax |
5672 | mov ebx, eax |
5673 | lea eax, [ebp+2000h] |
5673 | lea eax, [ebp+2000h] |
5674 | stdcall map_page, eax, ebx, PG_MAP |
5674 | stdcall map_page, eax, ebx, PG_READ |
5675 | lea eax, [ebp+3000h] |
5675 | lea eax, [ebp+3000h] |
5676 | add ebx, 0x1000 |
5676 | add ebx, 0x1000 |
5677 | stdcall map_page, eax, ebx, PG_MAP |
5677 | stdcall map_page, eax, ebx, PG_READ |
5678 | and ebx, 0xFFF |
5678 | and ebx, 0xFFF |
5679 | lea ebx, [ebx+ebp+2000h] |
5679 | lea ebx, [ebx+ebp+2000h] |
5680 | cmp dword [ebx], 'FACP' |
5680 | cmp dword [ebx], 'FACP' |
5681 | jz .fadt_found |
5681 | jz .fadt_found |
5682 | loop .scan_fadt |
5682 | loop .scan_fadt |
5683 | jmp no_acpi_power_off |
5683 | jmp no_acpi_power_off |
5684 | .fadt_found: |
5684 | .fadt_found: |
5685 | ; ebx is linear address of FADT |
5685 | ; ebx is linear address of FADT |
5686 | mov edi, [ebx+40] ; physical address of the DSDT |
5686 | mov edi, [ebx+40] ; physical address of the DSDT |
5687 | lea eax, [ebp+4000h] |
5687 | lea eax, [ebp+4000h] |
5688 | stdcall map_page, eax, edi, PG_MAP |
5688 | stdcall map_page, eax, edi, PG_READ |
5689 | lea eax, [ebp+5000h] |
5689 | lea eax, [ebp+5000h] |
5690 | lea esi, [edi+0x1000] |
5690 | lea esi, [edi+0x1000] |
5691 | stdcall map_page, eax, esi, PG_MAP |
5691 | stdcall map_page, eax, esi, PG_READ |
5692 | and esi, 0xFFF |
5692 | and esi, 0xFFF |
5693 | sub edi, esi |
5693 | sub edi, esi |
5694 | cmp dword [esi+ebp+4000h], 'DSDT' |
5694 | cmp dword [esi+ebp+4000h], 'DSDT' |
5695 | jnz no_acpi_power_off |
5695 | jnz no_acpi_power_off |
5696 | mov eax, [esi+ebp+4004h] ; DSDT length |
5696 | mov eax, [esi+ebp+4004h] ; DSDT length |
Line 5734... | Line 5734... | ||
5734 | jb @f |
5734 | jb @f |
5735 | sub esi, 0x1000 |
5735 | sub esi, 0x1000 |
5736 | add edi, 0x1000 |
5736 | add edi, 0x1000 |
5737 | push eax |
5737 | push eax |
5738 | lea eax, [ebp+4000h] |
5738 | lea eax, [ebp+4000h] |
5739 | stdcall map_page, eax, edi, PG_MAP |
5739 | stdcall map_page, eax, edi, PG_READ |
5740 | push PG_MAP |
5740 | push PG_READ |
5741 | lea eax, [edi+1000h] |
5741 | lea eax, [edi+1000h] |
5742 | push eax |
5742 | push eax |
5743 | lea eax, [ebp+5000h] |
5743 | lea eax, [ebp+5000h] |
5744 | push eax |
5744 | push eax |
5745 | stdcall map_page |
5745 | stdcall map_page |