forked from KolibriOS/kolibrios
move PIC functions into separate file
git-svn-id: svn://kolibrios.org@2118 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ff11e6b374
commit
0c8c27e46c
90
kernel/trunk/core/apic.inc
Normal file
90
kernel/trunk/core/apic.inc
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
;; ;;
|
||||||
|
;; Copyright (C) KolibriOS team 2004-2011. All rights reserved. ;;
|
||||||
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
|
;; ;;
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
align 4
|
||||||
|
pic_delay:
|
||||||
|
|
||||||
|
jmp pdl1
|
||||||
|
pdl1: ret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
rerouteirqs:
|
||||||
|
|
||||||
|
cli
|
||||||
|
|
||||||
|
mov al,0x11 ; icw4, edge triggered
|
||||||
|
out 0x20,al
|
||||||
|
call pic_delay
|
||||||
|
out 0xA0,al
|
||||||
|
call pic_delay
|
||||||
|
|
||||||
|
mov al,0x20 ; generate 0x20 +
|
||||||
|
out 0x21,al
|
||||||
|
call pic_delay
|
||||||
|
mov al,0x28 ; generate 0x28 +
|
||||||
|
out 0xA1,al
|
||||||
|
call pic_delay
|
||||||
|
|
||||||
|
mov al,0x04 ; slave at irq2
|
||||||
|
out 0x21,al
|
||||||
|
call pic_delay
|
||||||
|
mov al,0x02 ; at irq9
|
||||||
|
out 0xA1,al
|
||||||
|
call pic_delay
|
||||||
|
|
||||||
|
mov al,0x01 ; 8086 mode
|
||||||
|
out 0x21,al
|
||||||
|
call pic_delay
|
||||||
|
out 0xA1,al
|
||||||
|
call pic_delay
|
||||||
|
|
||||||
|
mov al,255 ; mask all irq's
|
||||||
|
out 0xA1,al
|
||||||
|
call pic_delay
|
||||||
|
out 0x21,al
|
||||||
|
call pic_delay
|
||||||
|
|
||||||
|
mov ecx,0x1000
|
||||||
|
cld
|
||||||
|
picl1: call pic_delay
|
||||||
|
loop picl1
|
||||||
|
|
||||||
|
mov al,255 ; mask all irq's
|
||||||
|
out 0xA1,al
|
||||||
|
call pic_delay
|
||||||
|
out 0x21,al
|
||||||
|
call pic_delay
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;proc enable_irq stdcall, irq_line:dword
|
||||||
|
enable_irq: ; FIXME make fastcall
|
||||||
|
mov ebx, [esp+4] ;irq_line
|
||||||
|
mov edx, 0x21
|
||||||
|
cmp ebx, 8
|
||||||
|
jb @F
|
||||||
|
mov edx, 0xA1
|
||||||
|
sub ebx,8
|
||||||
|
@@:
|
||||||
|
in al,dx
|
||||||
|
btr eax, ebx
|
||||||
|
out dx, al
|
||||||
|
ret 4
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;proc irq_eoi fastcall, irq_line:dword
|
||||||
|
irq_eoi:
|
||||||
|
cmp cl, 8
|
||||||
|
mov al, 0x20
|
||||||
|
jb @f
|
||||||
|
out 0xa0, al
|
||||||
|
@@:
|
||||||
|
out 0x20, al
|
||||||
|
ret
|
@ -143,21 +143,6 @@ proc detach_int_handler
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
|
||||||
proc enable_irq stdcall, irq_line:dword
|
|
||||||
mov ebx, [irq_line]
|
|
||||||
mov edx, 0x21
|
|
||||||
cmp ebx, 8
|
|
||||||
jb @F
|
|
||||||
mov edx, 0xA1
|
|
||||||
sub ebx,8
|
|
||||||
@@:
|
|
||||||
in al,dx
|
|
||||||
btr eax, ebx
|
|
||||||
out dx, al
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
|
|
||||||
macro irq_serv_h [num] {
|
macro irq_serv_h [num] {
|
||||||
forward
|
forward
|
||||||
@ -246,15 +231,22 @@ align 16
|
|||||||
.exit:
|
.exit:
|
||||||
mov [check_idle_semaphore],5
|
mov [check_idle_semaphore],5
|
||||||
|
|
||||||
cmp bp, 8
|
mov ecx, ebp
|
||||||
mov al, 0x20
|
call irq_eoi
|
||||||
jb @f
|
|
||||||
out 0xa0, al
|
|
||||||
@@:
|
|
||||||
out 0x20, al
|
|
||||||
|
|
||||||
restore_ring3_context
|
restore_ring3_context
|
||||||
add esp, 4
|
add esp, 4
|
||||||
iret
|
iret
|
||||||
|
|
||||||
|
align 4
|
||||||
|
irqD:
|
||||||
|
push eax
|
||||||
|
push ecx
|
||||||
|
xor eax,eax
|
||||||
|
out 0xf0,al
|
||||||
|
mov cl, 13
|
||||||
|
call irq_eoi
|
||||||
|
pop ecx
|
||||||
|
pop eax
|
||||||
|
iret
|
||||||
|
|
||||||
|
@ -27,8 +27,8 @@ irq0:
|
|||||||
add [next_usage_update],100
|
add [next_usage_update],100
|
||||||
call updatecputimes
|
call updatecputimes
|
||||||
.nocounter:
|
.nocounter:
|
||||||
mov al,0x20 ; send End Of Interrupt signal
|
xor ecx, ecx
|
||||||
out 0x20,al
|
call irq_eoi
|
||||||
btr dword[DONT_SWITCH], 0
|
btr dword[DONT_SWITCH], 0
|
||||||
jc .return
|
jc .return
|
||||||
call find_next_task
|
call find_next_task
|
||||||
|
@ -120,7 +120,7 @@ exc_c: ;
|
|||||||
reg_esi equ esp+0x04
|
reg_esi equ esp+0x04
|
||||||
reg_edi equ esp+0x00
|
reg_edi equ esp+0x00
|
||||||
|
|
||||||
Mov ds,ax,app_data ; çàãðóçèì ïðàâèëüíûå çíà÷åíèÿ
|
Mov ds,ax,app_data ; загрузим правильные значени
|
||||||
mov es,ax ; â ñåãìåíòíûå ðåãèñòðû
|
mov es,ax ; â ñåãìåíòíûå ðåãèñòðû
|
||||||
cld ; è ïðèâîäèì DF ê ñòàíäàðòó
|
cld ; è ïðèâîäèì DF ê ñòàíäàðòó
|
||||||
movzx ebx,bl
|
movzx ebx,bl
|
||||||
@ -237,18 +237,6 @@ show_error_parameters:
|
|||||||
restore reg_edi
|
restore reg_edi
|
||||||
|
|
||||||
|
|
||||||
align 4
|
|
||||||
irqD:
|
|
||||||
push eax
|
|
||||||
xor eax,eax
|
|
||||||
out 0xf0,al
|
|
||||||
mov al,0x20
|
|
||||||
out 0xa0,al
|
|
||||||
out 0x20,al
|
|
||||||
pop eax
|
|
||||||
iret
|
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
set_application_table_status:
|
set_application_table_status:
|
||||||
push eax
|
push eax
|
||||||
|
@ -839,6 +839,7 @@ end if
|
|||||||
; mov byte [BOOT_VAR + 48Eh], 0FFh
|
; mov byte [BOOT_VAR + 48Eh], 0FFh
|
||||||
; ret
|
; ret
|
||||||
|
|
||||||
|
align 4
|
||||||
v86_irq:
|
v86_irq:
|
||||||
; push irq/pushad/jmp v86_irq
|
; push irq/pushad/jmp v86_irq
|
||||||
; eax = irq
|
; eax = irq
|
||||||
@ -898,12 +899,8 @@ v86_irq2:
|
|||||||
pop ecx
|
pop ecx
|
||||||
.cont:
|
.cont:
|
||||||
loop .scan
|
loop .scan
|
||||||
mov al, 20h
|
mov ecx, edi
|
||||||
out 20h, al
|
call irq_eoi
|
||||||
cmp edi, 8
|
|
||||||
jb @f
|
|
||||||
out 0A0h, al
|
|
||||||
@@:
|
|
||||||
popad
|
popad
|
||||||
iretd
|
iretd
|
||||||
.found:
|
.found:
|
||||||
|
@ -332,7 +332,7 @@ irq_handler:
|
|||||||
|
|
||||||
mov [esi+COM_MOUSE_DATA.MouseByteNumber],0
|
mov [esi+COM_MOUSE_DATA.MouseByteNumber],0
|
||||||
.EndMouseInterrupt:
|
.EndMouseInterrupt:
|
||||||
|
mov al, 1
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;all initialized data place here
|
;all initialized data place here
|
||||||
|
@ -524,7 +524,7 @@ proc ac97_irq
|
|||||||
mov edx, IPR
|
mov edx, IPR
|
||||||
call [ctrl.ctrl_read32]
|
call [ctrl.ctrl_read32]
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz @f
|
jz @f
|
||||||
|
|
||||||
mov dword [status], eax
|
mov dword [status], eax
|
||||||
|
|
||||||
|
@ -239,7 +239,8 @@ else if sb_buffer_size eq full_buffer
|
|||||||
stdcall [callback],SB16Buffer0 ;for 64k buffer
|
stdcall [callback],SB16Buffer0 ;for 64k buffer
|
||||||
stdcall [callback],SB16Buffer1 ;for 64k buffer
|
stdcall [callback],SB16Buffer1 ;for 64k buffer
|
||||||
end if
|
end if
|
||||||
xor eax,eax
|
xor eax, eax
|
||||||
|
not eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.fill_second_half:
|
.fill_second_half:
|
||||||
@ -249,7 +250,8 @@ else if sb_buffer_size eq full_buffer
|
|||||||
stdcall [callback],SB16Buffer2 ;for 64k buffer
|
stdcall [callback],SB16Buffer2 ;for 64k buffer
|
||||||
stdcall [callback],SB16Buffer3 ;for 64k buffer
|
stdcall [callback],SB16Buffer3 ;for 64k buffer
|
||||||
end if
|
end if
|
||||||
xor eax,eax
|
xor eax, eax
|
||||||
|
not eax
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
;-------------------------------------------------------------------------------
|
;-------------------------------------------------------------------------------
|
||||||
|
@ -4119,62 +4119,6 @@ _rdtsc:
|
|||||||
ret
|
ret
|
||||||
end if
|
end if
|
||||||
|
|
||||||
rerouteirqs:
|
|
||||||
|
|
||||||
cli
|
|
||||||
|
|
||||||
mov al,0x11 ; icw4, edge triggered
|
|
||||||
out 0x20,al
|
|
||||||
call pic_delay
|
|
||||||
out 0xA0,al
|
|
||||||
call pic_delay
|
|
||||||
|
|
||||||
mov al,0x20 ; generate 0x20 +
|
|
||||||
out 0x21,al
|
|
||||||
call pic_delay
|
|
||||||
mov al,0x28 ; generate 0x28 +
|
|
||||||
out 0xA1,al
|
|
||||||
call pic_delay
|
|
||||||
|
|
||||||
mov al,0x04 ; slave at irq2
|
|
||||||
out 0x21,al
|
|
||||||
call pic_delay
|
|
||||||
mov al,0x02 ; at irq9
|
|
||||||
out 0xA1,al
|
|
||||||
call pic_delay
|
|
||||||
|
|
||||||
mov al,0x01 ; 8086 mode
|
|
||||||
out 0x21,al
|
|
||||||
call pic_delay
|
|
||||||
out 0xA1,al
|
|
||||||
call pic_delay
|
|
||||||
|
|
||||||
mov al,255 ; mask all irq's
|
|
||||||
out 0xA1,al
|
|
||||||
call pic_delay
|
|
||||||
out 0x21,al
|
|
||||||
call pic_delay
|
|
||||||
|
|
||||||
mov ecx,0x1000
|
|
||||||
cld
|
|
||||||
picl1: call pic_delay
|
|
||||||
loop picl1
|
|
||||||
|
|
||||||
mov al,255 ; mask all irq's
|
|
||||||
out 0xA1,al
|
|
||||||
call pic_delay
|
|
||||||
out 0x21,al
|
|
||||||
call pic_delay
|
|
||||||
|
|
||||||
cli
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
pic_delay:
|
|
||||||
|
|
||||||
jmp pdl1
|
|
||||||
pdl1: ret
|
|
||||||
|
|
||||||
|
|
||||||
sys_msg_board_str:
|
sys_msg_board_str:
|
||||||
|
@ -221,7 +221,7 @@ include "core/peload.inc" ;
|
|||||||
include "core/exports.inc"
|
include "core/exports.inc"
|
||||||
include "core/string.inc"
|
include "core/string.inc"
|
||||||
include "core/v86.inc" ; virtual-8086 manager
|
include "core/v86.inc" ; virtual-8086 manager
|
||||||
;include "core/apic.inc" ; Interrupt Controller functions
|
include "core/apic.inc" ; Interrupt Controller functions
|
||||||
include "core/irq.inc" ; irq handling functions
|
include "core/irq.inc" ; irq handling functions
|
||||||
|
|
||||||
; GUI stuff
|
; GUI stuff
|
||||||
|
Loading…
Reference in New Issue
Block a user