trunk: print cpu count on the debug board

git-svn-id: svn://kolibrios.org@2443 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Sergey Semyonov (Serge) 2012-03-09 15:50:49 +00:00
parent 3340831e5e
commit 2f5fd7a295
4 changed files with 59 additions and 17 deletions

View File

@ -61,7 +61,7 @@ APIC_init:
call IRQ_mask_all
; IOAPIC init
stdcall map_io_mem, [acpi_ioapic_base], 0x20, PG_SW
stdcall map_io_mem, [acpi_ioapic_base], 0x20, PG_SW+PG_NOCACHE
mov [IOAPIC_base], eax
mov eax, IOAPIC_VER
@ -121,14 +121,11 @@ APIC_init:
;===========================================================
align 4
LAPIC_init:
; Check MSR support
;....
; Get LAPIC base address
; mov ecx, 0x1b
; rdmsr ; it may be replaced to
; and ax, 0xf000 ; mov eax, 0xfee00000
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW
cmp [LAPIC_BASE], 0
jne .done
stdcall map_io_mem, [acpi_lapic_base], 0x1000, PG_SW+PG_NOCACHE
mov [LAPIC_BASE], eax
mov esi, eax
@ -200,6 +197,8 @@ LAPIC_init:
; Start (every 0.01 sec)
mov dword[esi + APIC_LVT_timer], 0x30020; periodic int 0x20
mov dword[esi + APIC_timer_init], eax
.done:
ret
;===========================================================

View File

@ -548,6 +548,7 @@ align 4
align 4
.exit:
pop ebp
inc [_display.mask_seqno]
popfd
pop esi
ret
@ -998,6 +999,7 @@ waredraw: ;////////////////////////////////////////////////////////////////////
mov edi, [TASK_COUNT]
movzx esi, word[WIN_POS + edi * 2]
call window._.set_screen
inc [_display.mask_seqno]
popad
; tell application to redraw itself
@ -1102,7 +1104,7 @@ align 4
add ecx, eax
add edx, ebx
call ebp
inc [_display.mask_seqno]
mov byte[MOUSE_BACKGROUND], 0
;--------------------------------------
align 4
@ -1204,6 +1206,7 @@ align 4
;--------------------------------------
align 4
.exit:
inc [_display.mask_seqno]
ret
;------------------------------------------------------------------------------
align 4
@ -1949,6 +1952,7 @@ align 4
align 4
.exit:
popad
inc [_display.mask_seqno]
ret
;--------------------------------------
align 4

View File

@ -432,6 +432,11 @@ proc test_cpu
ret
endp
iglobal
align 4
acpi_lapic_base dd 0xfee00000 ; default local apic base
endg
uglobal
align 4
acpi_rsdp rd 1
@ -443,8 +448,10 @@ acpi_dev_size rd 1
acpi_rsdt_base rd 1
acpi_madt_base rd 1
acpi_lapic_base rd 1
acpi_ioapic_base rd 1
cpu_count rd 1
smpt rd 16
endg
ACPI_HI_RSDP_WINDOW_START equ 0x000E0000
@ -493,6 +500,7 @@ rsdt_find: ;ecx= rsdt edx= SIG
lea ebx, [ecx+36]
mov esi, [ecx+4]
add esi, ecx
align 4
.next:
mov eax, [ebx]
cmp [eax], edx
@ -513,9 +521,7 @@ rsdt_find: ;ecx= rsdt edx= SIG
pop ebx
ret
align 4
check_acpi:
call acpi_locate
@ -533,22 +539,47 @@ check_acpi:
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
lea edx, [eax+44]
mov ecx, [eax+4]
add ecx, eax
.check:
mov eax, [edx]
cmp al, 1
je .ioapic
cmp al, 0
jne .io_apic
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
.ioapic:
.io_apic:
cmp al, 1
jne .next
mov eax, [edx+4]
mov [acpi_ioapic_base-OS_BASE], eax
ret
jmp .next

View File

@ -295,6 +295,8 @@ include 'init.inc'
org OS_BASE+$
include 'fdo.inc'
align 4
high_code:
mov ax, os_stack
@ -980,6 +982,13 @@ if defined debug_com_base
end if
mov eax, [cpu_count]
test eax, eax
jnz @F
mov al, 1 ; at least one CPU
@@:
DEBUGF 1, "K : %d CPU detected\n", eax
; START MULTITASKING
; A 'All set - press ESC to start' messages if need
@ -1005,7 +1014,6 @@ end if
; Fly :)
include 'unpacker.inc'
include 'fdo.inc'
align 4
boot_log: