LAPIC timer interrupt test

git-svn-id: svn://kolibrios.org@3531 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Artem Jerdev (art_zh) 2013-05-23 17:29:52 +00:00
parent 4d079770dc
commit 55496cc735
5 changed files with 678 additions and 631 deletions

View File

@ -158,7 +158,7 @@ fusion_pcie_init:
create_mmio_pte:
mov ecx, mmio_pte ; physical address
or ecx, (PG_NOCACHE + PG_SHARED)
or ecx, (PG_NOCACHE + PG_SHARED + PG_SW)
mov ebx, FUSION_MMIO ; linear address
shr ebx, 20
add ebx, (sys_pgdir - OS_BASE) ; PgDir entry @
@ -169,7 +169,7 @@ create_mmio_pte:
mov ecx, 0x01B ; APIC BAR
rdmsr
and eax, 0xFFFFF000 ; physical address
or eax, (PG_NOCACHE + PG_SHARED)
or eax, (PG_NOCACHE + PG_SHARED + PG_SW)
mov dword[mmio_pte + 0], eax
ret ; <<< OK >>>
@ -298,4 +298,26 @@ sys_rdmsr:
pop edx ecx
ret
apic_timer_reset:
xor eax, eax
mov [apic_data+0], eax
mov ebx, LAPIC_BAR+ 0x320
mov eax, [ebx]
and eax, 0xFFFEFF00
or eax, 0x0000003F ; int vector + norestart
mov [ebx], eax
mov dword[apic_data + 8], 100000000
ret
apic_timer_int:
push eax
inc dword [apic_data + 0]
mov eax, [apic_data + 8]
mov dword [LAPIC_BAR + 0x380], eax ; load APICTIC
mov dword [LAPIC_BAR + 0x0B0], 0 ; end of interrupt
; mov dword [LAPIC_BAR + 0x420], 0x3F ; end of interrupt
pop eax
iretd

View File

@ -273,6 +273,7 @@ FONT_I equ (OS_BASE+0x005E600)
TMP_STACK_TOP equ 0x006C000
apic_data equ (OS_BASE+0x006D000)
mmio_pte equ 0x006E000
sys_pgdir equ (OS_BASE+0x006F000)

View File

@ -48,7 +48,8 @@ iglobal
dd irq_serv.irq_5, p_irq6, irq_serv.irq_7
dd irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10
dd irq_serv.irq_11, irq_serv.irq_12, irqD,p_irq14,p_irq15
times 16 dd unknown_interrupt ;int_0x30..int_0x3F
times 15 dd unknown_interrupt ;int_0x30..int_0x3F
dd apic_timer_int
;int_0x40 gate trap (for directly copied)
dw i40 and 0xFFFF, os_code, 11101111b shl 8, i40 shr 16

View File

@ -21,13 +21,25 @@ FindHDD:
mov [ChannelNumber],1
mov [DiskNumber],0
call FindHDD_3
; mov ax,[Sector512+176]
; mov [DRIVE_DATA+6],ax
; mov ax,[Sector512+126]
; mov [DRIVE_DATA+8],ax
; mov ax,[Sector512+128]
; mov [DRIVE_DATA+8],ax
mov [DiskNumber],1
call FindHDD_3
; mov al,[Sector512+176]
; mov [DRIVE_DATA+7],al
inc [ChannelNumber]
mov [DiskNumber],0
call FindHDD_3
; mov al,[Sector512+176]
; mov [DRIVE_DATA+8],al
mov [DiskNumber],1
call FindHDD_1
; mov al,[Sector512+176]
; mov [DRIVE_DATA+9],al
jmp EndFindHDD
@ -44,10 +56,10 @@ FindHDD_1:
FindHDD_2:
call DeviceReset
cmp [DevErrorCode],0
jne FindHDD_2_2
;; jne FindHDD_2_2
; call ReadCD_ID
; cmp [DevErrorCode],0
; jne FindHDD_2_2
jne FindHDD_2_2
inc byte [DRIVE_DATA+1]
inc byte [DRIVE_DATA+1]
FindHDD_2_2:
@ -99,6 +111,8 @@ ReadHDD_ID:
test AL,08h ;состояние сигнала DRQ
jz @@WaitCompleet
; Принять блок данных от контроллера
; mov AX,DS
; mov ES,AX
mov EDI,Sector512 ;offset Sector512
mov DX,[ATABasePortAddr] ;регистр данных
mov CX,256 ;число считываемых слов
@ -187,10 +201,17 @@ SendCommandToHDD:
; Ожидать, пока диск не будет готов
inc DX
mov ecx,0xfff
; mov eax,[timer_ticks]
; mov [TickCounter_1],eax
@@WaitHDReady:
; Проверить время ожидани
dec ecx
; cmp ecx,0
jz @@Err1
; mov eax,[timer_ticks]
; sub eax,[TickCounter_1]
; cmp eax,300 ;îæèäàòü 300 òèêîâ
; ja @@Err1 ;îøèáêà òàéì-àóòà
; Прочитать регистр состояни
in AL,DX
; Проверить состояние сигнала BSY
@ -249,7 +270,6 @@ SendCommandToHDD:
; Завершение работы программы
ret
if 0
;*************************************************
;* ЧТЕНИЕ ИДЕНТИФИКАТОРА УСТРОЙСТВА ATAPI *
;* Входные параметры передаются через глобальные *
@ -279,6 +299,7 @@ ReadCD_ID:
@@WaitCompleet_1:
; Проверить врем
dec ecx
; cmp ecx,0
jz @@Error1_1 ;ошибка тайм-аута
; Проверить готовность
in AL,DX
@ -289,6 +310,8 @@ ReadCD_ID:
test AL,08h ;состояние сигнала DRQ
jz @@WaitCompleet_1
; Принять блок данных от контроллера
; mov AX,DS
; mov ES,AX
mov EDI,Sector512 ;offset Sector512
mov DX,[ATABasePortAddr] ;порт 1x0h
mov CX,256 ;число считываемых слов
@ -303,8 +326,6 @@ ReadCD_ID:
@@End_1:
ret
end if
;*************************************************
;* СБРОС УСТРОЙСТВА *
;* Входные параметры передаются через глобальные *

View File

@ -712,6 +712,8 @@ include 'detect/disks.inc'
; mov esi, boot_uDMA_ok
; call boot_log
call apic_timer_reset
; LOAD FIRST APPLICATION
cli
if 0