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:
|
create_mmio_pte:
|
||||||
mov ecx, mmio_pte ; physical address
|
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
|
mov ebx, FUSION_MMIO ; linear address
|
||||||
shr ebx, 20
|
shr ebx, 20
|
||||||
add ebx, (sys_pgdir - OS_BASE) ; PgDir entry @
|
add ebx, (sys_pgdir - OS_BASE) ; PgDir entry @
|
||||||
@ -169,7 +169,7 @@ create_mmio_pte:
|
|||||||
mov ecx, 0x01B ; APIC BAR
|
mov ecx, 0x01B ; APIC BAR
|
||||||
rdmsr
|
rdmsr
|
||||||
and eax, 0xFFFFF000 ; physical address
|
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
|
mov dword[mmio_pte + 0], eax
|
||||||
|
|
||||||
ret ; <<< OK >>>
|
ret ; <<< OK >>>
|
||||||
@ -298,4 +298,26 @@ sys_rdmsr:
|
|||||||
pop edx ecx
|
pop edx ecx
|
||||||
ret
|
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
|
TMP_STACK_TOP equ 0x006C000
|
||||||
|
|
||||||
|
apic_data equ (OS_BASE+0x006D000)
|
||||||
mmio_pte equ 0x006E000
|
mmio_pte equ 0x006E000
|
||||||
sys_pgdir equ (OS_BASE+0x006F000)
|
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_5, p_irq6, irq_serv.irq_7
|
||||||
dd irq_serv.irq_8, irq_serv.irq_9, irq_serv.irq_10
|
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
|
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)
|
;int_0x40 gate trap (for directly copied)
|
||||||
dw i40 and 0xFFFF, os_code, 11101111b shl 8, i40 shr 16
|
dw i40 and 0xFFFF, os_code, 11101111b shl 8, i40 shr 16
|
||||||
|
@ -21,13 +21,25 @@ FindHDD:
|
|||||||
mov [ChannelNumber],1
|
mov [ChannelNumber],1
|
||||||
mov [DiskNumber],0
|
mov [DiskNumber],0
|
||||||
call FindHDD_3
|
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
|
mov [DiskNumber],1
|
||||||
call FindHDD_3
|
call FindHDD_3
|
||||||
|
; mov al,[Sector512+176]
|
||||||
|
; mov [DRIVE_DATA+7],al
|
||||||
inc [ChannelNumber]
|
inc [ChannelNumber]
|
||||||
mov [DiskNumber],0
|
mov [DiskNumber],0
|
||||||
call FindHDD_3
|
call FindHDD_3
|
||||||
|
; mov al,[Sector512+176]
|
||||||
|
; mov [DRIVE_DATA+8],al
|
||||||
mov [DiskNumber],1
|
mov [DiskNumber],1
|
||||||
call FindHDD_1
|
call FindHDD_1
|
||||||
|
; mov al,[Sector512+176]
|
||||||
|
; mov [DRIVE_DATA+9],al
|
||||||
|
|
||||||
jmp EndFindHDD
|
jmp EndFindHDD
|
||||||
|
|
||||||
@ -44,10 +56,10 @@ FindHDD_1:
|
|||||||
FindHDD_2:
|
FindHDD_2:
|
||||||
call DeviceReset
|
call DeviceReset
|
||||||
cmp [DevErrorCode],0
|
cmp [DevErrorCode],0
|
||||||
jne FindHDD_2_2
|
;; jne FindHDD_2_2
|
||||||
; call ReadCD_ID
|
; call ReadCD_ID
|
||||||
; cmp [DevErrorCode],0
|
; cmp [DevErrorCode],0
|
||||||
; jne FindHDD_2_2
|
jne FindHDD_2_2
|
||||||
inc byte [DRIVE_DATA+1]
|
inc byte [DRIVE_DATA+1]
|
||||||
inc byte [DRIVE_DATA+1]
|
inc byte [DRIVE_DATA+1]
|
||||||
FindHDD_2_2:
|
FindHDD_2_2:
|
||||||
@ -99,6 +111,8 @@ ReadHDD_ID:
|
|||||||
test AL,08h ;состояние сигнала DRQ
|
test AL,08h ;состояние сигнала DRQ
|
||||||
jz @@WaitCompleet
|
jz @@WaitCompleet
|
||||||
; Принять блок данных от контроллера
|
; Принять блок данных от контроллера
|
||||||
|
; mov AX,DS
|
||||||
|
; mov ES,AX
|
||||||
mov EDI,Sector512 ;offset Sector512
|
mov EDI,Sector512 ;offset Sector512
|
||||||
mov DX,[ATABasePortAddr] ;регистр данных
|
mov DX,[ATABasePortAddr] ;регистр данных
|
||||||
mov CX,256 ;число считываемых слов
|
mov CX,256 ;число считываемых слов
|
||||||
@ -187,10 +201,17 @@ SendCommandToHDD:
|
|||||||
; Ожидать, пока диск не будет готов
|
; Ожидать, пока диск не будет готов
|
||||||
inc DX
|
inc DX
|
||||||
mov ecx,0xfff
|
mov ecx,0xfff
|
||||||
|
; mov eax,[timer_ticks]
|
||||||
|
; mov [TickCounter_1],eax
|
||||||
@@WaitHDReady:
|
@@WaitHDReady:
|
||||||
; Проверить время ожидани
|
; Проверить время ожидани
|
||||||
dec ecx
|
dec ecx
|
||||||
|
; cmp ecx,0
|
||||||
jz @@Err1
|
jz @@Err1
|
||||||
|
; mov eax,[timer_ticks]
|
||||||
|
; sub eax,[TickCounter_1]
|
||||||
|
; cmp eax,300 ;îæèäàòü 300 òèêîâ
|
||||||
|
; ja @@Err1 ;îøèáêà òàéì-àóòà
|
||||||
; Прочитать регистр состояни
|
; Прочитать регистр состояни
|
||||||
in AL,DX
|
in AL,DX
|
||||||
; Проверить состояние сигнала BSY
|
; Проверить состояние сигнала BSY
|
||||||
@ -249,7 +270,6 @@ SendCommandToHDD:
|
|||||||
; Завершение работы программы
|
; Завершение работы программы
|
||||||
ret
|
ret
|
||||||
|
|
||||||
if 0
|
|
||||||
;*************************************************
|
;*************************************************
|
||||||
;* ЧТЕНИЕ ИДЕНТИФИКАТОРА УСТРОЙСТВА ATAPI *
|
;* ЧТЕНИЕ ИДЕНТИФИКАТОРА УСТРОЙСТВА ATAPI *
|
||||||
;* Входные параметры передаются через глобальные *
|
;* Входные параметры передаются через глобальные *
|
||||||
@ -279,6 +299,7 @@ ReadCD_ID:
|
|||||||
@@WaitCompleet_1:
|
@@WaitCompleet_1:
|
||||||
; Проверить врем
|
; Проверить врем
|
||||||
dec ecx
|
dec ecx
|
||||||
|
; cmp ecx,0
|
||||||
jz @@Error1_1 ;ошибка тайм-аута
|
jz @@Error1_1 ;ошибка тайм-аута
|
||||||
; Проверить готовность
|
; Проверить готовность
|
||||||
in AL,DX
|
in AL,DX
|
||||||
@ -289,6 +310,8 @@ ReadCD_ID:
|
|||||||
test AL,08h ;состояние сигнала DRQ
|
test AL,08h ;состояние сигнала DRQ
|
||||||
jz @@WaitCompleet_1
|
jz @@WaitCompleet_1
|
||||||
; Принять блок данных от контроллера
|
; Принять блок данных от контроллера
|
||||||
|
; mov AX,DS
|
||||||
|
; mov ES,AX
|
||||||
mov EDI,Sector512 ;offset Sector512
|
mov EDI,Sector512 ;offset Sector512
|
||||||
mov DX,[ATABasePortAddr] ;порт 1x0h
|
mov DX,[ATABasePortAddr] ;порт 1x0h
|
||||||
mov CX,256 ;число считываемых слов
|
mov CX,256 ;число считываемых слов
|
||||||
@ -303,8 +326,6 @@ ReadCD_ID:
|
|||||||
@@End_1:
|
@@End_1:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
end if
|
|
||||||
|
|
||||||
;*************************************************
|
;*************************************************
|
||||||
;* СБРОС УСТРОЙСТВА *
|
;* СБРОС УСТРОЙСТВА *
|
||||||
;* Входные параметры передаются через глобальные *
|
;* Входные параметры передаются через глобальные *
|
||||||
|
@ -712,6 +712,8 @@ include 'detect/disks.inc'
|
|||||||
; mov esi, boot_uDMA_ok
|
; mov esi, boot_uDMA_ok
|
||||||
; call boot_log
|
; call boot_log
|
||||||
|
|
||||||
|
call apic_timer_reset
|
||||||
|
|
||||||
; LOAD FIRST APPLICATION
|
; LOAD FIRST APPLICATION
|
||||||
cli
|
cli
|
||||||
if 0
|
if 0
|
||||||
|
Loading…
Reference in New Issue
Block a user