forked from KolibriOS/kolibrios
kernel: Split acpi.inc and hpet.inc from init.inc.
Also, replace some hardcoded constants with macros. git-svn-id: svn://kolibrios.org@8111 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
a26092c937
commit
a9121a0da9
298
kernel/trunk/acpi/acpi.inc
Normal file
298
kernel/trunk/acpi/acpi.inc
Normal file
@ -0,0 +1,298 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; ;;
|
||||||
|
;; Copyright (C) KolibriOS team 2004-2020. All rights reserved. ;;
|
||||||
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
|
;; ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
$Revision$
|
||||||
|
|
||||||
|
; ACPI Generic Address Structure
|
||||||
|
struct GAS
|
||||||
|
ASID db ? ; address space id
|
||||||
|
BitWidth db ?
|
||||||
|
BitOffset db ?
|
||||||
|
AccessSize db ?
|
||||||
|
Address DQ ?
|
||||||
|
ends
|
||||||
|
|
||||||
|
ASID.SYSTEM_MEMORY = 0
|
||||||
|
ASID.SYSTEM_IO = 1
|
||||||
|
ASID.PCI_CONFIG = 2
|
||||||
|
ASID.PCI_EC = 3
|
||||||
|
ASID.PCI_SMBUS = 4
|
||||||
|
|
||||||
|
ACCESS_SIZE.UNDEFINED = 0
|
||||||
|
ACCESS_SIZE.BYTE = 1
|
||||||
|
ACCESS_SIZE.WORD = 2
|
||||||
|
ACCESS_SIZE.DWORD = 3
|
||||||
|
ACCESS_SIZE.QWORD = 4
|
||||||
|
|
||||||
|
|
||||||
|
struct ACPI_RSDP
|
||||||
|
Signature DQ ?
|
||||||
|
Checksum db ?
|
||||||
|
OEMID rb 6
|
||||||
|
Revision db ?
|
||||||
|
RsdtAddress dd ?
|
||||||
|
; for Revision >= 2
|
||||||
|
Length dd ?
|
||||||
|
XsdtAddress DQ ?
|
||||||
|
ExtChecksum db ?
|
||||||
|
Reserved rb 3
|
||||||
|
ends
|
||||||
|
|
||||||
|
struct ACPI_TABLE ; DESCRIPTION_HEADER
|
||||||
|
Signature dd ?
|
||||||
|
Length dd ?
|
||||||
|
Revision db ?
|
||||||
|
Checksum db ?
|
||||||
|
OEMID rb 6
|
||||||
|
OEMTableID rb 8
|
||||||
|
OEMRevision rb 4
|
||||||
|
CreatorID rb 4
|
||||||
|
CreatorRevision rb 4
|
||||||
|
ends
|
||||||
|
|
||||||
|
struct ACPI_RSDT ACPI_TABLE
|
||||||
|
Entry rd (0x1000-sizeof.ACPI_TABLE)/4
|
||||||
|
ends
|
||||||
|
|
||||||
|
struct ACPI_HPET ACPI_TABLE
|
||||||
|
ID dd ?
|
||||||
|
Base GAS
|
||||||
|
SeqNumber db ?
|
||||||
|
MainCounterMinimum dw ?
|
||||||
|
PageProtectionOEM db ?
|
||||||
|
ends
|
||||||
|
|
||||||
|
struct ACPI_MADT ACPI_TABLE
|
||||||
|
Local_IC_Addr dd ?
|
||||||
|
Flags dd ?
|
||||||
|
IntController rb 0x1000-sizeof.ACPI_TABLE-ACPI_MADT.IntController
|
||||||
|
ends
|
||||||
|
|
||||||
|
struct ACPI_FADT ACPI_TABLE
|
||||||
|
FirmwareCtrl dd ?
|
||||||
|
DSDT dd ?
|
||||||
|
db ?
|
||||||
|
PreferredPMProfile db ?
|
||||||
|
SCI_INT dw ?
|
||||||
|
SMI_CMD dd ?
|
||||||
|
ACPI_ENABLE db ?
|
||||||
|
ACPI_DISABLE db ?
|
||||||
|
S4BIOS_REQ db ?
|
||||||
|
PSTATE_CNT db ?
|
||||||
|
PM1a_EVT_BLK dd ?
|
||||||
|
PM1b_EVT_BLK dd ?
|
||||||
|
PM1a_CNT_BLK dd ?
|
||||||
|
PM1b_CNT_BLK dd ?
|
||||||
|
PM2_CNT_BLK dd ?
|
||||||
|
PM_TMR_BLK dd ?
|
||||||
|
GPE0_BLK dd ?
|
||||||
|
GPE1_BLK dd ?
|
||||||
|
PM1_EVT_LEN db ?
|
||||||
|
PM1_CNT_LEN db ?
|
||||||
|
PM2_CNT_LEN db ?
|
||||||
|
PM_TMR_LEN db ?
|
||||||
|
GPE0_BLK_LEN db ?
|
||||||
|
GPE1_BLK_LEN db ?
|
||||||
|
GPE1_BASE db ?
|
||||||
|
CST_CNT db ?
|
||||||
|
P_LVL2_LAT dw ?
|
||||||
|
P_LVL3_LAT dw ?
|
||||||
|
FLUSH_SIZE dw ?
|
||||||
|
FLUSH_STRIDE dw ?
|
||||||
|
DUTY_OFFSET db ?
|
||||||
|
DUTY_WIDTH db ?
|
||||||
|
DAY_ALRM db ?
|
||||||
|
MON_ALRM db ?
|
||||||
|
CENTURY db ?
|
||||||
|
IAPC_BOOT_ARCH dw ?
|
||||||
|
db ?
|
||||||
|
Flags dd ?
|
||||||
|
RESET_REG GAS
|
||||||
|
RESET_VALUE db ?
|
||||||
|
ARM_BOOT_ARCH dw ?
|
||||||
|
FADT_Minor_Version db ?
|
||||||
|
X_FIRMWARE_CTRL DQ ?
|
||||||
|
X_DSDT DQ ?
|
||||||
|
X_PM1a_EVT_BLK GAS
|
||||||
|
X_PM1b_EVT_BLK GAS
|
||||||
|
X_PM1a_CNT_BLK GAS
|
||||||
|
X_PM1b_CNT_BLK GAS
|
||||||
|
X_PM2_CNT_BLK GAS
|
||||||
|
X_PM_TMR_BLK GAS
|
||||||
|
X_GPE0_BLK GAS
|
||||||
|
X_GPE1_BLK GAS
|
||||||
|
SLEEP_CONTROL_REG GAS
|
||||||
|
SLEEP_STATUS_REG GAS
|
||||||
|
HypervisorVendorID rb 8
|
||||||
|
ends
|
||||||
|
|
||||||
|
MAX_SSDTS = 32
|
||||||
|
|
||||||
|
iglobal
|
||||||
|
align 4
|
||||||
|
acpi_lapic_base dd 0xfee00000 ; default local apic base
|
||||||
|
endg
|
||||||
|
|
||||||
|
uglobal
|
||||||
|
align 4
|
||||||
|
acpi_dev_data rd 1
|
||||||
|
acpi_dev_size rd 1
|
||||||
|
|
||||||
|
acpi_rsdp_base rd 1
|
||||||
|
acpi_rsdt_base rd 1
|
||||||
|
acpi_rsdt_size rd 1
|
||||||
|
acpi_fadt_base rd 1
|
||||||
|
acpi_fadt_size rd 1
|
||||||
|
acpi_ssdt_base rd MAX_SSDTS
|
||||||
|
acpi_ssdt_size rd MAX_SSDTS
|
||||||
|
acpi_ssdt_cnt rd 1
|
||||||
|
acpi_madt_base rd 1
|
||||||
|
acpi_madt_size rd 1
|
||||||
|
acpi_ioapic_base rd MAX_IOAPICS
|
||||||
|
acpi_hpet_base rd 1
|
||||||
|
acpi_hpet_size rd 1
|
||||||
|
cpu_count rd 1
|
||||||
|
smpt rd 16
|
||||||
|
endg
|
||||||
|
|
||||||
|
align 4
|
||||||
|
acpi_get_root_ptr:
|
||||||
|
mov eax, [acpi_rsdp_base]
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
rsdt_find: ;ecx= rsdt edx= SIG
|
||||||
|
push ebx
|
||||||
|
push esi
|
||||||
|
|
||||||
|
lea ebx, [ecx+ACPI_RSDT.Entry]
|
||||||
|
mov esi, [ecx+ACPI_RSDT.Length]
|
||||||
|
add esi, ecx
|
||||||
|
align 4
|
||||||
|
.next:
|
||||||
|
mov eax, [ebx]
|
||||||
|
cmp [eax], edx
|
||||||
|
je .done
|
||||||
|
|
||||||
|
add ebx, 4
|
||||||
|
cmp ebx, esi
|
||||||
|
jb .next
|
||||||
|
|
||||||
|
xor eax, eax
|
||||||
|
pop esi
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
.done:
|
||||||
|
mov eax, [ebx]
|
||||||
|
pop esi
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
check_acpi:
|
||||||
|
cmp [acpi_rsdp_base], 0
|
||||||
|
jz .done
|
||||||
|
stdcall map_io_mem, [acpi_rsdp_base], sizeof.ACPI_RSDP, \
|
||||||
|
PG_GLOBAL+PAT_WB+PG_READ
|
||||||
|
mov [acpi_rsdp_base], eax
|
||||||
|
.rsdp_done:
|
||||||
|
cmp [acpi_rsdt_base], 0
|
||||||
|
jz .rsdt_done
|
||||||
|
stdcall map_io_mem, [acpi_rsdt_base], [acpi_rsdt_size], \
|
||||||
|
PG_GLOBAL+PAT_WB+PG_READ
|
||||||
|
mov [acpi_rsdt_base], eax
|
||||||
|
.rsdt_done:
|
||||||
|
cmp [acpi_fadt_base], 0
|
||||||
|
jz .fadt_done
|
||||||
|
stdcall map_io_mem, [acpi_fadt_base], [acpi_fadt_size], \
|
||||||
|
PG_GLOBAL+PAT_WB+PG_READ
|
||||||
|
mov [acpi_fadt_base], eax
|
||||||
|
.fadt_done:
|
||||||
|
cmp [acpi_hpet_base], 0
|
||||||
|
jz .hpet_done
|
||||||
|
stdcall map_io_mem, [acpi_hpet_base], [acpi_hpet_size], \
|
||||||
|
PG_GLOBAL+PAT_WB+PG_READ
|
||||||
|
mov [acpi_hpet_base], eax
|
||||||
|
mov eax, [eax+ACPI_HPET.Base.Address.lo]
|
||||||
|
mov [hpet_base], eax
|
||||||
|
.hpet_done:
|
||||||
|
cmp [acpi_madt_base], 0
|
||||||
|
jz .madt_done
|
||||||
|
stdcall map_io_mem, [acpi_madt_base], [acpi_madt_size], \
|
||||||
|
PG_GLOBAL+PAT_WB+PG_READ
|
||||||
|
mov [acpi_madt_base], eax
|
||||||
|
|
||||||
|
mov ecx, [eax+ACPI_MADT.Local_IC_Addr]
|
||||||
|
mov [acpi_lapic_base], ecx
|
||||||
|
|
||||||
|
mov edi, smpt
|
||||||
|
mov ebx, [ecx+APIC_ID]
|
||||||
|
shr ebx, 24 ; read APIC ID
|
||||||
|
|
||||||
|
mov [edi], ebx ; bootstrap always first
|
||||||
|
inc [cpu_count]
|
||||||
|
add edi, 4
|
||||||
|
|
||||||
|
mov [ioapic_cnt], 0
|
||||||
|
lea edx, [eax+ACPI_MADT.IntController]
|
||||||
|
mov ecx, [eax+ACPI_MADT.Length]
|
||||||
|
add ecx, eax
|
||||||
|
.check:
|
||||||
|
mov eax, [edx]
|
||||||
|
cmp al, 0
|
||||||
|
je .lapic
|
||||||
|
cmp al, 1
|
||||||
|
je .io_apic
|
||||||
|
jmp .next
|
||||||
|
.lapic:
|
||||||
|
shr eax, 24 ; get APIC ID
|
||||||
|
cmp eax, ebx ; skip self
|
||||||
|
je .next
|
||||||
|
|
||||||
|
test [edx+4], byte 1 ; is enabled ?
|
||||||
|
jz .next
|
||||||
|
|
||||||
|
cmp [cpu_count], 16
|
||||||
|
jae .next
|
||||||
|
|
||||||
|
stosd ; store APIC ID
|
||||||
|
inc [cpu_count]
|
||||||
|
jmp .next
|
||||||
|
|
||||||
|
.io_apic:
|
||||||
|
mov eax, [ioapic_cnt]
|
||||||
|
push dword[edx+4]
|
||||||
|
pop [acpi_ioapic_base+eax*4]
|
||||||
|
push dword[edx+8]
|
||||||
|
pop [ioapic_gsi_base+eax*4]
|
||||||
|
inc [ioapic_cnt]
|
||||||
|
jmp .next
|
||||||
|
|
||||||
|
.next:
|
||||||
|
mov eax, [edx]
|
||||||
|
movzx eax, ah
|
||||||
|
add edx, eax
|
||||||
|
cmp edx, ecx
|
||||||
|
jb .check
|
||||||
|
.madt_done:
|
||||||
|
|
||||||
|
xor ecx, ecx
|
||||||
|
.next_ssdt:
|
||||||
|
cmp ecx, [acpi_ssdt_cnt]
|
||||||
|
jz .ssdt_done
|
||||||
|
push ecx
|
||||||
|
stdcall map_io_mem, [acpi_ssdt_base+ecx*4], [acpi_ssdt_size+ecx*4], \
|
||||||
|
PG_GLOBAL+PAT_WB+PG_READ
|
||||||
|
pop ecx
|
||||||
|
mov [acpi_ssdt_base+ecx*4], eax
|
||||||
|
inc ecx
|
||||||
|
jmp .next_ssdt
|
||||||
|
.ssdt_done:
|
||||||
|
|
||||||
|
.done:
|
||||||
|
ret
|
@ -13,33 +13,12 @@
|
|||||||
|
|
||||||
$Revision$
|
$Revision$
|
||||||
|
|
||||||
; ACPI Generic Address Structure
|
|
||||||
struct GAS
|
|
||||||
asid db ? ; address space id
|
|
||||||
bit_width db ?
|
|
||||||
bit_offset db ?
|
|
||||||
access_size db ?
|
|
||||||
address DQ ?
|
|
||||||
ends
|
|
||||||
|
|
||||||
ASID.SYSTEM_MEMORY = 0
|
|
||||||
ASID.SYSTEM_IO = 1
|
|
||||||
ASID.PCI_CONFIG = 2
|
|
||||||
ASID.PCI_EC = 3
|
|
||||||
ASID.PCI_SMBUS = 4
|
|
||||||
|
|
||||||
ACCESS_SIZE.UNDEFINED = 0
|
|
||||||
ACCESS_SIZE.BYTE = 1
|
|
||||||
ACCESS_SIZE.WORD = 2
|
|
||||||
ACCESS_SIZE.DWORD = 3
|
|
||||||
ACCESS_SIZE.QWORD = 4
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
system_shutdown: ; shut down the system
|
system_shutdown: ; shut down the system
|
||||||
|
|
||||||
cmp byte [BOOT.shutdown_type], SYSTEM_SHUTDOWN
|
cmp [BOOT.shutdown_type], SYSTEM_SHUTDOWN
|
||||||
jb @F
|
jb @F
|
||||||
cmp byte [BOOT.shutdown_type], SYSTEM_RESTART
|
cmp [BOOT.shutdown_type], SYSTEM_RESTART
|
||||||
jbe .valid
|
jbe .valid
|
||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
@ -83,7 +62,7 @@ yes_shutdown_param:
|
|||||||
cli
|
cli
|
||||||
call IRQ_mask_all
|
call IRQ_mask_all
|
||||||
|
|
||||||
mov eax, dword[BOOT.shutdown_type]
|
movzx eax, [BOOT.shutdown_type]
|
||||||
cmp al, SYSTEM_RESTART
|
cmp al, SYSTEM_RESTART
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
@ -98,34 +77,24 @@ yes_shutdown_param:
|
|||||||
mov ecx, (restart_code_end - restart_code_start)/4
|
mov ecx, (restart_code_end - restart_code_start)/4
|
||||||
rep movsd
|
rep movsd
|
||||||
|
|
||||||
call create_trampoline_pgmap
|
cmp [BOOT.shutdown_type], SYSTEM_SHUTDOWN
|
||||||
mov cr3, eax
|
jne not_power_off
|
||||||
jmp @F
|
|
||||||
org $-OS_BASE
|
|
||||||
@@:
|
|
||||||
|
|
||||||
;disable paging
|
|
||||||
|
|
||||||
mov eax, cr0
|
|
||||||
and eax, 0x7FFFFFFF
|
|
||||||
mov cr0, eax
|
|
||||||
mov eax, cr3
|
|
||||||
mov cr3, eax
|
|
||||||
|
|
||||||
cmp byte [BOOT_LO.shutdown_type], SYSTEM_SHUTDOWN
|
|
||||||
jne no_acpi_power_off
|
|
||||||
|
|
||||||
; system_power_off
|
; system_power_off
|
||||||
|
|
||||||
mov ebx, [acpi_fadt_base-OS_BASE]
|
mov ebx, [acpi_fadt_base]
|
||||||
cmp dword [ebx], 'FACP'
|
test ebx, ebx
|
||||||
jne no_acpi_power_off
|
jz no_acpi
|
||||||
mov esi, [acpi_dsdt_base-OS_BASE]
|
cmp [ebx+ACPI_TABLE.Signature], 'FACP'
|
||||||
cmp dword [esi], 'DSDT'
|
jne no_acpi
|
||||||
jne no_acpi_power_off
|
mov esi, [acpi_ssdt_base] ; first SSDT is DSDT
|
||||||
mov eax, [esi+4] ; DSDT length
|
test esi, esi
|
||||||
|
jz no_acpi
|
||||||
|
cmp [esi+ACPI_TABLE.Signature], 'DSDT'
|
||||||
|
jne no_acpi
|
||||||
|
mov eax, [esi+ACPI_TABLE.Length]
|
||||||
sub eax, 36+4
|
sub eax, 36+4
|
||||||
jbe no_acpi_power_off
|
jbe no_acpi
|
||||||
add esi, 36
|
add esi, 36
|
||||||
.scan_dsdt:
|
.scan_dsdt:
|
||||||
cmp dword [esi], '_S5_'
|
cmp dword [esi], '_S5_'
|
||||||
@ -143,7 +112,7 @@ org $-OS_BASE
|
|||||||
cmp byte [esi], 0 ; 0 means zero byte, 0Ah xx means byte xx
|
cmp byte [esi], 0 ; 0 means zero byte, 0Ah xx means byte xx
|
||||||
jz @f
|
jz @f
|
||||||
cmp byte [esi], 0xA
|
cmp byte [esi], 0xA
|
||||||
jnz no_acpi_power_off
|
jnz no_acpi
|
||||||
inc esi
|
inc esi
|
||||||
mov cl, [esi]
|
mov cl, [esi]
|
||||||
@@:
|
@@:
|
||||||
@ -153,7 +122,7 @@ org $-OS_BASE
|
|||||||
cmp byte [esi], 0
|
cmp byte [esi], 0
|
||||||
jz @f
|
jz @f
|
||||||
cmp byte [esi], 0xA
|
cmp byte [esi], 0xA
|
||||||
jnz no_acpi_power_off
|
jnz no_acpi
|
||||||
inc esi
|
inc esi
|
||||||
mov ch, [esi]
|
mov ch, [esi]
|
||||||
@@:
|
@@:
|
||||||
@ -162,14 +131,14 @@ org $-OS_BASE
|
|||||||
inc esi
|
inc esi
|
||||||
dec eax
|
dec eax
|
||||||
jnz .scan_dsdt
|
jnz .scan_dsdt
|
||||||
jmp no_acpi_power_off
|
jmp no_acpi
|
||||||
do_acpi_power_off:
|
do_acpi_power_off:
|
||||||
mov edx, [ebx+48]
|
mov edx, [ebx+ACPI_FADT.SMI_CMD]
|
||||||
test edx, edx
|
test edx, edx
|
||||||
jz .nosmi
|
jz .nosmi
|
||||||
mov al, [ebx+52]
|
mov al, [ebx+ACPI_FADT.ACPI_ENABLE]
|
||||||
out dx, al
|
out dx, al
|
||||||
mov edx, [ebx+64]
|
mov edx, [ebx+ACPI_FADT.PM1a_CNT_BLK]
|
||||||
@@:
|
@@:
|
||||||
in ax, dx
|
in ax, dx
|
||||||
test al, 1
|
test al, 1
|
||||||
@ -178,12 +147,12 @@ do_acpi_power_off:
|
|||||||
and cx, 0x0707
|
and cx, 0x0707
|
||||||
shl cx, 2
|
shl cx, 2
|
||||||
or cx, 0x2020
|
or cx, 0x2020
|
||||||
mov edx, [ebx+64]
|
mov edx, [ebx+ACPI_FADT.PM1a_CNT_BLK]
|
||||||
in ax, dx
|
in ax, dx
|
||||||
and ax, 203h
|
and ax, 203h
|
||||||
or ah, cl
|
or ah, cl
|
||||||
out dx, ax
|
out dx, ax
|
||||||
mov edx, [ebx+68]
|
mov edx, [ebx+ACPI_FADT.PM1b_CNT_BLK]
|
||||||
test edx, edx
|
test edx, edx
|
||||||
jz @f
|
jz @f
|
||||||
in ax, dx
|
in ax, dx
|
||||||
@ -191,40 +160,72 @@ do_acpi_power_off:
|
|||||||
or ah, ch
|
or ah, ch
|
||||||
out dx, ax
|
out dx, ax
|
||||||
@@:
|
@@:
|
||||||
jmp $
|
jmp no_acpi
|
||||||
|
|
||||||
no_acpi_power_off:
|
not_power_off:
|
||||||
cmp byte[BOOT_LO.shutdown_type], SYSTEM_REBOOT
|
cmp [BOOT.shutdown_type], SYSTEM_REBOOT
|
||||||
jnz no_acpi_reboot
|
jnz not_reboot
|
||||||
; try to reboot via ACPI fixed features
|
; try to reboot via ACPI fixed features
|
||||||
mov ebx, [acpi_fadt_base-OS_BASE]
|
mov ebx, [acpi_fadt_base]
|
||||||
cmp dword[ebx], 'FACP'
|
test ebx, ebx
|
||||||
jne no_acpi_power_off
|
jz no_acpi
|
||||||
test dword[ebx+0x70], 1 SHL 10 ; RESET_REG_SUP
|
cmp [ebx+ACPI_TABLE.Signature], 'FACP'
|
||||||
jz no_acpi_reboot
|
jne no_acpi
|
||||||
cmp [ebx+0x74+GAS.asid], ASID.SYSTEM_IO
|
cmp [ebx+ACPI_FADT.Length], ACPI_FADT.RESET_VALUE
|
||||||
jnz no_acpi_reboot
|
jbe no_acpi
|
||||||
cmp [ebx+0x74+GAS.bit_width], 8
|
test [ebx+ACPI_FADT.Flags], 1 SHL 10 ; reset_reg_supported
|
||||||
jnz no_acpi_reboot
|
jz no_acpi
|
||||||
cmp [ebx+0x74+GAS.bit_offset], 0
|
cmp [ebx+ACPI_FADT.RESET_REG.ASID], ASID.SYSTEM_IO
|
||||||
jnz no_acpi_reboot
|
jnz no_acpi
|
||||||
cmp [ebx+0x74+GAS.access_size], ACCESS_SIZE.BYTE
|
cmp [ebx+ACPI_FADT.RESET_REG.BitWidth], 8
|
||||||
ja no_acpi_reboot
|
jnz no_acpi
|
||||||
cmp [ebx+0x74+GAS.address.hi], 0
|
cmp [ebx+ACPI_FADT.RESET_REG.BitOffset], 0
|
||||||
jnz no_acpi_reboot
|
jnz no_acpi
|
||||||
mov edx, [ebx+0x74+GAS.address.lo]
|
cmp [ebx+ACPI_FADT.RESET_REG.AccessSize], ACCESS_SIZE.BYTE
|
||||||
movzx eax, byte[ebx+0x80]
|
ja no_acpi
|
||||||
|
cmp [ebx+ACPI_FADT.RESET_REG.Address.hi], 0
|
||||||
|
jnz no_acpi
|
||||||
|
; 'enable' ACPI
|
||||||
|
mov edx, [ebx+ACPI_FADT.SMI_CMD]
|
||||||
|
test edx, edx
|
||||||
|
jz .nosmi
|
||||||
|
mov al, [ebx+ACPI_FADT.ACPI_ENABLE]
|
||||||
out dx, al
|
out dx, al
|
||||||
jmp $
|
mov edx, [ebx+ACPI_FADT.PM1a_CNT_BLK]
|
||||||
; unreachable
|
@@:
|
||||||
no_acpi_reboot:
|
in ax, dx
|
||||||
|
test al, 1
|
||||||
|
jz @b
|
||||||
|
.nosmi:
|
||||||
|
|
||||||
|
mov edx, [ebx+ACPI_FADT.RESET_REG.Address.lo]
|
||||||
|
movzx eax, [ebx+ACPI_FADT.RESET_VALUE]
|
||||||
|
out dx, al
|
||||||
|
jmp no_acpi
|
||||||
|
|
||||||
|
not_reboot:
|
||||||
|
no_acpi:
|
||||||
|
call create_trampoline_pgmap
|
||||||
|
mov cr3, eax
|
||||||
|
jmp @F
|
||||||
|
org $-OS_BASE
|
||||||
|
@@:
|
||||||
|
|
||||||
|
;disable paging
|
||||||
|
|
||||||
|
mov eax, cr0
|
||||||
|
and eax, 0x7FFFFFFF
|
||||||
|
mov cr0, eax
|
||||||
|
mov eax, cr3
|
||||||
|
mov cr3, eax
|
||||||
|
|
||||||
jmp 0x50000
|
jmp 0x50000
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
restart_code_start:
|
restart_code_start:
|
||||||
org 0x50000
|
org 0x50000
|
||||||
|
|
||||||
cmp byte [BOOT_LO.shutdown_type], SYSTEM_RESTART
|
cmp [BOOT_LO.shutdown_type], SYSTEM_RESTART
|
||||||
jne @F
|
jne @F
|
||||||
|
|
||||||
mov esi, _CLEAN_ZONE-OS_BASE
|
mov esi, _CLEAN_ZONE-OS_BASE
|
||||||
|
@ -248,7 +248,6 @@ BTN_ADDR = OS_BASE + 0x000FE88
|
|||||||
MEM_AMOUNT = OS_BASE + 0x000FE8C
|
MEM_AMOUNT = OS_BASE + 0x000FE8C
|
||||||
|
|
||||||
SYS_SHUTDOWN = OS_BASE + 0x000FF00
|
SYS_SHUTDOWN = OS_BASE + 0x000FF00
|
||||||
TASK_ACTIVATE = OS_BASE + 0x000FF01
|
|
||||||
|
|
||||||
|
|
||||||
TMP_STACK_TOP = 0x007CC00
|
TMP_STACK_TOP = 0x007CC00
|
||||||
@ -278,7 +277,7 @@ LFB_BASE = 0xFE000000
|
|||||||
|
|
||||||
new_app_base = 0;
|
new_app_base = 0;
|
||||||
|
|
||||||
twdw = 0x2000 ; CURRENT_TASK - window_data
|
twdw = CURRENT_TASK - window_data
|
||||||
|
|
||||||
std_application_base_address = new_app_base
|
std_application_base_address = new_app_base
|
||||||
RING0_STACK_SIZE = 0x2000
|
RING0_STACK_SIZE = 0x2000
|
||||||
|
@ -561,8 +561,3 @@ get_clock_ns:
|
|||||||
mov edx, 10000000
|
mov edx, 10000000
|
||||||
mul edx
|
mul edx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
|
||||||
acpi_get_root_ptr:
|
|
||||||
mov eax, [acpi_rsdp]
|
|
||||||
ret
|
|
||||||
|
74
kernel/trunk/core/hpet.inc
Normal file
74
kernel/trunk/core/hpet.inc
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; ;;
|
||||||
|
;; Copyright (C) KolibriOS team 2004-2020. All rights reserved. ;;
|
||||||
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
|
;; ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
$Revision$
|
||||||
|
|
||||||
|
HPET_ID = 0x0000
|
||||||
|
HPET_PERIOD = 0x0004
|
||||||
|
HPET_CFG_ENABLE = 0x0001
|
||||||
|
HPET_CFG = 0x0010
|
||||||
|
HPET_COUNTER = 0x00f0
|
||||||
|
HPET_T0_CFG = 0x0100
|
||||||
|
|
||||||
|
HPET_TN_LEVEL = 0x0002
|
||||||
|
HPET_TN_ENABLE = 0x0004
|
||||||
|
HPET_TN_FSB = 0x4000
|
||||||
|
|
||||||
|
uglobal
|
||||||
|
hpet_base rd 1
|
||||||
|
hpet_period rd 1
|
||||||
|
hpet_timers rd 1
|
||||||
|
hpet_tsc_start rd 2
|
||||||
|
endg
|
||||||
|
|
||||||
|
align 4
|
||||||
|
init_hpet:
|
||||||
|
mov ebx, [hpet_base]
|
||||||
|
test ebx, ebx
|
||||||
|
jz .done
|
||||||
|
|
||||||
|
mov eax, [ebx]
|
||||||
|
and ah, 0x1F
|
||||||
|
inc ah
|
||||||
|
movzx eax, ah
|
||||||
|
mov [hpet_timers], eax
|
||||||
|
mov ecx, eax
|
||||||
|
|
||||||
|
mov eax, [ebx+HPET_PERIOD]
|
||||||
|
xor edx, edx
|
||||||
|
shld edx, eax, 10
|
||||||
|
shl eax, 10
|
||||||
|
mov esi, 1000000
|
||||||
|
div esi
|
||||||
|
mov [hpet_period], eax
|
||||||
|
|
||||||
|
mov esi, [ebx+HPET_CFG]
|
||||||
|
and esi, not HPET_CFG_ENABLE
|
||||||
|
mov [ebx+HPET_CFG], esi ;stop main counter
|
||||||
|
|
||||||
|
lea edx, [ebx+HPET_T0_CFG]
|
||||||
|
@@:
|
||||||
|
jcxz @F
|
||||||
|
mov eax, [edx]
|
||||||
|
and eax, not (HPET_TN_ENABLE+HPET_TN_LEVEL+HPET_TN_FSB)
|
||||||
|
mov [edx], eax
|
||||||
|
add edx, 0x20
|
||||||
|
dec ecx
|
||||||
|
jmp @B
|
||||||
|
@@:
|
||||||
|
mov [ebx+HPET_COUNTER], ecx ;reset main counter
|
||||||
|
mov [ebx+HPET_COUNTER+4], ecx
|
||||||
|
|
||||||
|
or esi, HPET_CFG_ENABLE
|
||||||
|
mov [ebx+HPET_CFG], esi ;and start again
|
||||||
|
|
||||||
|
.done:
|
||||||
|
rdtsc
|
||||||
|
mov [hpet_tsc_start], eax
|
||||||
|
mov [hpet_tsc_start+4], edx
|
||||||
|
|
||||||
|
ret
|
@ -410,43 +410,66 @@ proc test_cpu
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
iglobal
|
|
||||||
align 4
|
|
||||||
acpi_lapic_base dd 0xfee00000 ; default local apic base
|
|
||||||
endg
|
|
||||||
|
|
||||||
uglobal
|
|
||||||
align 4
|
|
||||||
acpi_rsdp rd 1
|
|
||||||
acpi_rsdt rd 1
|
|
||||||
acpi_madt rd 1
|
|
||||||
|
|
||||||
acpi_dev_data rd 1
|
|
||||||
acpi_dev_size rd 1
|
|
||||||
|
|
||||||
acpi_rsdt_base rd 1
|
|
||||||
acpi_fadt_base rd 1
|
|
||||||
acpi_dsdt_base rd 1
|
|
||||||
acpi_dsdt_size rd 1
|
|
||||||
acpi_madt_base rd 1
|
|
||||||
acpi_ioapic_base rd MAX_IOAPICS
|
|
||||||
acpi_hpet_base rd 1
|
|
||||||
hpet_base rd 1
|
|
||||||
hpet_period rd 1
|
|
||||||
hpet_timers rd 1
|
|
||||||
hpet_tsc_start rd 2
|
|
||||||
cpu_count rd 1
|
|
||||||
smpt rd 16
|
|
||||||
endg
|
|
||||||
|
|
||||||
ACPI_HI_RSDP_WINDOW_START = 0x000E0000
|
ACPI_HI_RSDP_WINDOW_START = 0x000E0000
|
||||||
ACPI_HI_RSDP_WINDOW_END = 0x00100000
|
ACPI_HI_RSDP_WINDOW_END = 0x00100000
|
||||||
ACPI_RSDP_CHECKSUM_LENGTH = 20
|
ACPI_RSDP_CHECKSUM_LENGTH = 20
|
||||||
|
|
||||||
ACPI_HPET_SIGN = 'HPET'
|
proc acpi_locate_tables uses ebx esi edi
|
||||||
ACPI_MADT_SIGN = 'APIC'
|
mov ebx, [ebx+ACPI_RSDP.RsdtAddress]
|
||||||
ACPI_FADT_SIGN = 'FACP'
|
mov [acpi_rsdt_base-OS_BASE], ebx
|
||||||
|
mov eax, [ebx+ACPI_RSDT.Length]
|
||||||
|
mov [acpi_rsdt_size-OS_BASE], eax
|
||||||
|
|
||||||
|
mov esi, [acpi_rsdt_base-OS_BASE]
|
||||||
|
mov ecx, [esi+ACPI_RSDT.Length]
|
||||||
|
lea edi, [esi+ecx]
|
||||||
|
add esi, sizeof.ACPI_TABLE
|
||||||
|
movi ecx, 1
|
||||||
|
.next_table:
|
||||||
|
cmp esi, edi
|
||||||
|
jae .done
|
||||||
|
lodsd
|
||||||
|
cmp [eax+ACPI_TABLE.Signature], 'SSDT' ; skip DSDT if present
|
||||||
|
jz .ssdt ; read it from FADT
|
||||||
|
cmp [eax+ACPI_TABLE.Signature], 'FACP' ; this is FADT
|
||||||
|
jz .fadt
|
||||||
|
cmp [eax+ACPI_TABLE.Signature], 'APIC' ; this is MADT
|
||||||
|
jz .madt
|
||||||
|
cmp [eax+ACPI_TABLE.Signature], 'HPET'
|
||||||
|
jz .hpet
|
||||||
|
jmp .next_table
|
||||||
|
.ssdt:
|
||||||
|
mov [acpi_ssdt_base+ecx*4-OS_BASE], eax
|
||||||
|
mov eax, [eax+ACPI_TABLE.Length]
|
||||||
|
mov [acpi_ssdt_size+ecx*4-OS_BASE], eax
|
||||||
|
inc ecx
|
||||||
|
jmp .next_table
|
||||||
|
.fadt:
|
||||||
|
mov [acpi_fadt_base-OS_BASE], eax
|
||||||
|
cmp [eax+ACPI_FADT.DSDT], 0
|
||||||
|
jz @f
|
||||||
|
mov edx, [eax+ACPI_FADT.DSDT]
|
||||||
|
mov [acpi_ssdt_base-OS_BASE], edx
|
||||||
|
mov edx, [edx+ACPI_TABLE.Length]
|
||||||
|
mov [acpi_ssdt_size-OS_BASE], edx
|
||||||
|
@@:
|
||||||
|
mov eax, [eax+ACPI_TABLE.Length]
|
||||||
|
mov [acpi_fadt_size-OS_BASE], eax
|
||||||
|
jmp .next_table
|
||||||
|
.madt:
|
||||||
|
mov [acpi_madt_base-OS_BASE], eax
|
||||||
|
mov eax, [eax+ACPI_TABLE.Length]
|
||||||
|
mov [acpi_madt_size-OS_BASE], eax
|
||||||
|
jmp .next_table
|
||||||
|
.hpet:
|
||||||
|
mov [acpi_hpet_base-OS_BASE], eax
|
||||||
|
mov eax, [eax+ACPI_TABLE.Length]
|
||||||
|
mov [acpi_hpet_size-OS_BASE], eax
|
||||||
|
jmp .next_table
|
||||||
|
.done:
|
||||||
|
mov [acpi_ssdt_cnt-OS_BASE], ecx
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
acpi_locate:
|
acpi_locate:
|
||||||
push ebx
|
push ebx
|
||||||
@ -474,7 +497,11 @@ else
|
|||||||
call .check
|
call .check
|
||||||
end if
|
end if
|
||||||
.done:
|
.done:
|
||||||
mov eax, ebx
|
mov [acpi_rsdp_base-OS_BASE], ebx
|
||||||
|
test ebx, ebx
|
||||||
|
jz @f
|
||||||
|
call acpi_locate_tables
|
||||||
|
@@:
|
||||||
pop edi
|
pop edi
|
||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
@ -502,185 +529,3 @@ end if
|
|||||||
jb .check
|
jb .check
|
||||||
xor ebx, ebx
|
xor ebx, ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
align 4
|
|
||||||
rsdt_find: ;ecx= rsdt edx= SIG
|
|
||||||
push ebx
|
|
||||||
push esi
|
|
||||||
|
|
||||||
lea ebx, [ecx+36]
|
|
||||||
mov esi, [ecx+4]
|
|
||||||
add esi, ecx
|
|
||||||
align 4
|
|
||||||
.next:
|
|
||||||
mov eax, [ebx]
|
|
||||||
cmp [eax], edx
|
|
||||||
je .done
|
|
||||||
|
|
||||||
add ebx, 4
|
|
||||||
cmp ebx, esi
|
|
||||||
jb .next
|
|
||||||
|
|
||||||
xor eax, eax
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
ret
|
|
||||||
|
|
||||||
.done:
|
|
||||||
mov eax, [ebx]
|
|
||||||
pop esi
|
|
||||||
pop ebx
|
|
||||||
ret
|
|
||||||
|
|
||||||
align 4
|
|
||||||
check_acpi:
|
|
||||||
|
|
||||||
call acpi_locate
|
|
||||||
test eax, eax
|
|
||||||
jz .done
|
|
||||||
|
|
||||||
mov [acpi_rsdp-OS_BASE], eax
|
|
||||||
mov ecx, [eax+16]
|
|
||||||
mov edx, ACPI_FADT_SIGN
|
|
||||||
mov [acpi_rsdt_base-OS_BASE], ecx
|
|
||||||
call rsdt_find
|
|
||||||
mov [acpi_fadt_base-OS_BASE], eax
|
|
||||||
test eax, eax
|
|
||||||
jz @f
|
|
||||||
|
|
||||||
mov eax, [eax+40]
|
|
||||||
mov [acpi_dsdt_base-OS_BASE], eax
|
|
||||||
mov eax, [eax+4]
|
|
||||||
mov [acpi_dsdt_size-OS_BASE], eax
|
|
||||||
@@:
|
|
||||||
mov edx, ACPI_HPET_SIGN
|
|
||||||
mov ecx, [acpi_rsdt_base-OS_BASE]
|
|
||||||
call rsdt_find
|
|
||||||
test eax, eax
|
|
||||||
jz @F
|
|
||||||
|
|
||||||
mov [acpi_hpet_base-OS_BASE], eax
|
|
||||||
mov eax, [eax+44]
|
|
||||||
mov [hpet_base-OS_BASE], eax
|
|
||||||
@@:
|
|
||||||
mov edx, ACPI_MADT_SIGN
|
|
||||||
mov ecx, [acpi_rsdt_base-OS_BASE]
|
|
||||||
call rsdt_find
|
|
||||||
test eax, eax
|
|
||||||
jz .done
|
|
||||||
|
|
||||||
mov [acpi_madt_base-OS_BASE], eax
|
|
||||||
mov ecx, [eax+36]
|
|
||||||
mov [acpi_lapic_base-OS_BASE], ecx
|
|
||||||
|
|
||||||
mov edi, smpt-OS_BASE
|
|
||||||
mov ebx, [ecx+0x20]
|
|
||||||
shr ebx, 24 ; read APIC ID
|
|
||||||
|
|
||||||
mov [edi], ebx ; bootstrap always first
|
|
||||||
inc [cpu_count-OS_BASE]
|
|
||||||
add edi, 4
|
|
||||||
|
|
||||||
mov [ioapic_cnt-OS_BASE], 0
|
|
||||||
lea edx, [eax+44]
|
|
||||||
mov ecx, [eax+4]
|
|
||||||
add ecx, eax
|
|
||||||
.check:
|
|
||||||
mov eax, [edx]
|
|
||||||
cmp al, 0
|
|
||||||
je .lapic
|
|
||||||
cmp al, 1
|
|
||||||
je .io_apic
|
|
||||||
jmp .next
|
|
||||||
.lapic:
|
|
||||||
shr eax, 24 ; get APIC ID
|
|
||||||
cmp eax, ebx ; skip self
|
|
||||||
je .next
|
|
||||||
|
|
||||||
test [edx+4], byte 1 ; is enabled ?
|
|
||||||
jz .next
|
|
||||||
|
|
||||||
cmp [cpu_count-OS_BASE], 16
|
|
||||||
jae .next
|
|
||||||
|
|
||||||
stosd ; store APIC ID
|
|
||||||
inc [cpu_count-OS_BASE]
|
|
||||||
.next:
|
|
||||||
mov eax, [edx]
|
|
||||||
movzx eax, ah
|
|
||||||
add edx, eax
|
|
||||||
cmp edx, ecx
|
|
||||||
jb .check
|
|
||||||
.done:
|
|
||||||
ret
|
|
||||||
|
|
||||||
.io_apic:
|
|
||||||
mov eax, [ioapic_cnt-OS_BASE]
|
|
||||||
push dword[edx+4]
|
|
||||||
pop [acpi_ioapic_base-OS_BASE+eax*4]
|
|
||||||
push dword[edx+8]
|
|
||||||
pop [ioapic_gsi_base-OS_BASE+eax*4]
|
|
||||||
inc [ioapic_cnt-OS_BASE]
|
|
||||||
jmp .next
|
|
||||||
|
|
||||||
HPET_PERIOD = 0x0004
|
|
||||||
HPET_CFG_ENABLE = 0x0001
|
|
||||||
HPET_CFG = 0x0010
|
|
||||||
HPET_COUNTER = 0x00f0
|
|
||||||
HPET_T0_CFG = 0x0100
|
|
||||||
|
|
||||||
HPET_TN_LEVEL = 0x0002
|
|
||||||
HPET_TN_ENABLE = 0x0004
|
|
||||||
HPET_TN_FSB = 0x4000
|
|
||||||
|
|
||||||
align 4
|
|
||||||
init_hpet:
|
|
||||||
mov ebx, [hpet_base-OS_BASE]
|
|
||||||
test ebx, ebx
|
|
||||||
jz .done
|
|
||||||
|
|
||||||
mov eax, [ebx]
|
|
||||||
and ah, 0x1F
|
|
||||||
inc ah
|
|
||||||
movzx eax, ah
|
|
||||||
mov [hpet_timers-OS_BASE], eax
|
|
||||||
mov ecx, eax
|
|
||||||
|
|
||||||
mov eax, [ebx+HPET_PERIOD]
|
|
||||||
xor edx, edx
|
|
||||||
shld edx, eax, 10
|
|
||||||
shl eax, 10
|
|
||||||
mov esi, 1000000
|
|
||||||
div esi
|
|
||||||
mov [hpet_period-OS_BASE], eax
|
|
||||||
|
|
||||||
mov esi, [ebx+HPET_CFG]
|
|
||||||
and esi, not HPET_CFG_ENABLE
|
|
||||||
mov [ebx+HPET_CFG], esi ;stop main counter
|
|
||||||
|
|
||||||
lea edx, [ebx+HPET_T0_CFG]
|
|
||||||
@@:
|
|
||||||
jcxz @F
|
|
||||||
mov eax, [edx]
|
|
||||||
and eax, not (HPET_TN_ENABLE+HPET_TN_LEVEL+HPET_TN_FSB)
|
|
||||||
mov [edx], eax
|
|
||||||
add edx, 0x20
|
|
||||||
dec ecx
|
|
||||||
jmp @B
|
|
||||||
@@:
|
|
||||||
mov [ebx+HPET_COUNTER], ecx ;reset main counter
|
|
||||||
mov [ebx+HPET_COUNTER+4], ecx
|
|
||||||
|
|
||||||
or esi, HPET_CFG_ENABLE
|
|
||||||
mov [ebx+HPET_CFG], esi ;and start again
|
|
||||||
|
|
||||||
.done:
|
|
||||||
rdtsc
|
|
||||||
mov [hpet_tsc_start-OS_BASE], eax
|
|
||||||
mov [hpet_tsc_start+4-OS_BASE], edx
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -210,8 +210,7 @@ B32:
|
|||||||
call test_cpu
|
call test_cpu
|
||||||
bts [cpu_caps-OS_BASE], CAPS_TSC ;force use rdtsc
|
bts [cpu_caps-OS_BASE], CAPS_TSC ;force use rdtsc
|
||||||
|
|
||||||
call check_acpi
|
call acpi_locate
|
||||||
call init_hpet
|
|
||||||
call init_BIOS32
|
call init_BIOS32
|
||||||
; MEMORY MODEL
|
; MEMORY MODEL
|
||||||
call mem_test
|
call mem_test
|
||||||
@ -552,14 +551,17 @@ high_code:
|
|||||||
@@:
|
@@:
|
||||||
mov [clipboard_main_list], eax
|
mov [clipboard_main_list], eax
|
||||||
|
|
||||||
|
call check_acpi
|
||||||
|
|
||||||
mov eax, [hpet_base]
|
mov eax, [hpet_base]
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz @F
|
jz @F
|
||||||
mov eax, [hpet_base]
|
mov eax, [hpet_base]
|
||||||
stdcall map_io_mem, [hpet_base], 1024, PG_GLOBAL+PAT_UC+PG_SWR
|
stdcall map_io_mem, [hpet_base], 1024, PG_GLOBAL+PAT_UC+PG_SWR
|
||||||
mov [hpet_base], eax
|
mov [hpet_base], eax
|
||||||
mov eax, [eax]
|
mov eax, [eax+HPET_ID]
|
||||||
DEBUGF 1, "K : HPET caps %x\n", eax
|
DEBUGF 1, "K : HPET caps %x\n", eax
|
||||||
|
call init_hpet
|
||||||
@@:
|
@@:
|
||||||
; SET UP OS TASK
|
; SET UP OS TASK
|
||||||
|
|
||||||
@ -892,7 +894,7 @@ include "detect/vortex86.inc" ; Vortex86 SoC detection code
|
|||||||
mov ebx, [hpet_base]
|
mov ebx, [hpet_base]
|
||||||
test ebx, ebx
|
test ebx, ebx
|
||||||
jz @F
|
jz @F
|
||||||
mov ebx, [ebx+0xF0]
|
mov ebx, [ebx+HPET_COUNTER]
|
||||||
|
|
||||||
rdtsc
|
rdtsc
|
||||||
mov ecx, 1000
|
mov ecx, 1000
|
||||||
|
@ -24,10 +24,13 @@ include "core/string.inc"
|
|||||||
include "core/v86.inc" ; 16-bit mode machine
|
include "core/v86.inc" ; 16-bit mode machine
|
||||||
include "core/irq.inc" ; interrupt handling functions
|
include "core/irq.inc" ; interrupt handling functions
|
||||||
include "core/apic.inc"
|
include "core/apic.inc"
|
||||||
|
include "core/hpet.inc"
|
||||||
include "core/timers.inc"
|
include "core/timers.inc"
|
||||||
include "core/clipboard.inc"
|
include "core/clipboard.inc"
|
||||||
include "core/slab.inc"
|
include "core/slab.inc"
|
||||||
|
|
||||||
|
include "acpi/acpi.inc"
|
||||||
|
|
||||||
include "posix/posix.inc"
|
include "posix/posix.inc"
|
||||||
|
|
||||||
include "boot/shutdown.inc" ; kernel shutdown
|
include "boot/shutdown.inc" ; kernel shutdown
|
||||||
|
Loading…
Reference in New Issue
Block a user