Subversion Repositories Kolibri OS

Rev

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