forked from KolibriOS/kolibrios
LAPIC timer interrupt test
git-svn-id: svn://kolibrios.org@3531 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
4d079770dc
commit
55496cc735
@ -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
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
;*************************************************
|
||||
;* СБРОС УСТРОЙСТВА *
|
||||
;* Входные параметры передаются через глобальные *
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user