Reorganization interrupts handlers part 2.

(I hope, I didn't something stupid.)
Fixed bug in get_pid function.
Added copyright in com mouse driver.
Fixed incorrect comment inscription in boot\ru.inc .

git-svn-id: svn://kolibrios.org@774 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Rus
2008-03-18 17:19:08 +00:00
parent b38aa8a9e9
commit 66658538e4
14 changed files with 3582 additions and 3536 deletions
+99 -99
View File
@@ -4,12 +4,12 @@ include '../../../proc32.inc'
include '../../../imports.inc'
struc IOCTL
{ .handle dd ?
.io_code dd ?
.input dd ?
.inp_size dd ?
.output dd ?
.out_size dd ?
{ .handle dd ?
.io_code dd ?
.input dd ?
.inp_size dd ?
.output dd ?
.out_size dd ?
}
virtual at 0
@@ -22,7 +22,7 @@ public version
DRV_ENTRY equ 1
DRV_EXIT equ -1
MT_3B equ 0
MT_3B equ 0
MT_3BScroll equ 3
MT_5BScroll equ 4
@@ -33,85 +33,85 @@ section '.flat' code readable align 16
proc START stdcall, state:dword
cmp [state], DRV_ENTRY
jne .fin
cmp [state], DRV_ENTRY
jne .fin
.init:
call detect_mouse
test eax,eax
jnz .exit
call detect_mouse
test eax,eax
jnz .exit
mov [MouseType],MT_3B
mov [MouseType],MT_3B
call try_mode_ID3
test eax,eax
jnz .stop_try
mov [MouseType],MT_3BScroll
call try_mode_ID4
test eax,eax
jnz .stop_try
mov [MouseType],MT_5BScroll
call try_mode_ID3
test eax,eax
jnz .stop_try
mov [MouseType],MT_3BScroll
call try_mode_ID4
test eax,eax
jnz .stop_try
mov [MouseType],MT_5BScroll
.stop_try:
mov bl, 0x20 ; read command byte
call kbd_cmd
cmp ah,1
je .exit
mov bl, 0x20 ; read command byte
call kbd_cmd
cmp ah,1
je .exit
call kbd_read
cmp ah,1
je .exit
call kbd_read
cmp ah,1
je .exit
or al, 10b
push eax
mov bl, 0x60 ; write command byte
call kbd_cmd
cmp ah,1
je .exit
or al, 10b
push eax
mov bl, 0x60 ; write command byte
call kbd_cmd
cmp ah,1
je .exit
pop eax
call kbd_write
cmp ah,1
je .exit
pop eax
call kbd_write
cmp ah,1
je .exit
mov al, 0xF4 ; enable data reporting
call mouse_cmd
mov al, 0xF4 ; enable data reporting
call mouse_cmd
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
stdcall AttachIntHandler, 12, irq_handler
stdcall RegService, my_service, service_proc
ret
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
stdcall AttachIntHandler, 12, irq_handler, dword 0
stdcall RegService, my_service, service_proc
ret
.fin:
;stdcall DetachIntHandler, 12, irq_handler
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
xor eax, eax
ret
;stdcall DetachIntHandler, 12, irq_handler
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
xor eax, eax
ret
.exit:
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
xor eax, eax
ret
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
xor eax, eax
ret
endp
proc service_proc stdcall, ioctl:dword
mov edi, [ioctl]
mov eax, [edi+IOCTL.io_code]
test eax, eax
jz .getversion
jz .getversion
cmp eax,1
jz .gettype
jz .gettype
.err:
or eax, -1
or eax, -1
ret
.ok:
@@ -120,13 +120,13 @@ proc service_proc stdcall, ioctl:dword
.getversion:
cmp [edi+IOCTL.out_size], 4
jb .err
jb .err
mov edi, [edi+IOCTL.output]
mov dword [edi], PS2_DRV_VER ; version of driver
jmp .ok
.gettype:
cmp [edi+IOCTL.out_size], 4
jb .err
jb .err
mov edi, [edi+IOCTL.output]
mov eax,[MouseType]
mov dword [edi], eax ; mouse type
@@ -138,95 +138,95 @@ detect_mouse:
mov bl, 0xAD ; disable keyboard interface
call kbd_cmd
cmp ah,1
je .fail
je .fail
mov bl, 0xA8 ; enable mouse interface
call kbd_cmd
cmp ah,1
je .fail
je .fail
mov al, 0xFF ; reset
mov al, 0xFF ; reset
call mouse_cmd
jc .fail
jc .fail
call mouse_read
jc .fail
jc .fail
cmp al, 0xAA
jne .fail ; dead mouse
jne .fail ; dead mouse
; get device ID
call mouse_read
jc .fail
jc .fail
cmp al, 0x00
jne .fail ; unknown device
jne .fail ; unknown device
xor eax,eax
ret
.fail:
or eax,-1
or eax,-1
ret
try_mode_ID3:
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;200d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x64 ;100d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x50 ;80d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF2 ;Get device id
call mouse_cmd
jc .fail
jc .fail
call mouse_read
jc .fail
jc .fail
cmp al, 0x03
jne .fail
xor eax,eax
ret
.fail:
or eax,-1
or eax,-1
ret
try_mode_ID4:
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;200d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;100d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x50 ;80d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF2 ;Get device id
call mouse_cmd
jc .fail
jc .fail
call mouse_read
jc .fail
jc .fail
cmp al, 0x04
jne .fail
@@ -234,7 +234,7 @@ try_mode_ID4:
ret
.fail:
or eax,-1
or eax,-1
ret
include 'ps2m_iofuncs.inc'
@@ -242,12 +242,12 @@ include 'ps2m_irqh.inc'
section '.data' data readable writable align 16
version dd 0x00050005
version dd 0x00050005
my_service db 'ps2mouse',0
;iofuncs data
mouse_cmd_byte db 0
mouse_nr_tries db 0
mouse_cmd_byte db 0
mouse_nr_tries db 0
mouse_nr_resends db 0
;hid data
@@ -259,10 +259,10 @@ third_byte db 0
fourth_byte db 0
;main data
MouseType dd 0
MouseType dd 0
XMoving dd 0
YMoving dd 0
ZMoving dd 0
ButtonState dd 0
XMoving dd 0
YMoving dd 0
ZMoving dd 0
ButtonState dd 0
;timerTicks dd 0
+1 -1
View File
@@ -349,7 +349,7 @@ proc START stdcall, state:dword
bt eax, ebx
jnc .fail_msg
stdcall AttachIntHandler, ebx, ac97_irq
stdcall AttachIntHandler, ebx, ac97_irq, dword 0
.reg:
stdcall RegService, sz_sound_srv, service_proc
+1 -1
View File
@@ -13,7 +13,7 @@ $Revision$
; Modifyed by BadBugsKiller 12.01.2004 17:45
; ╪ЁшЇЄ єьхэ№°хэ т ЁрчьхЁх ш ЄхяхЁ№ ёюёЄюшЄ шч 2-єї ўрёЄхщ,
; ёюфхЁцр∙шї Єюы№ъю ёшьтюы√ Ёєёёъюую рыЇртшЄр.
; ёшьтюы√ т ъюфшЁютъх ASCII (─╬╤'ютёър ), ъюфютр  ёЄрэшЎр 866.
; ёшьтюы√ т ъюфшЁютъх ASCII (─╬╤'ютёър ), ъюфютр  ёЄЁрэшЎр 866.
RU_FNT1:
db 0x00, 0x00, 0x1E, 0x36, 0x66, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0xFE, 0x62, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00
+36 -4
View File
@@ -14,7 +14,7 @@ DRV_CURRENT equ 5 ;current drivers model version
DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT
align 4
proc attach_int_handler stdcall, irq:dword, handler:dword
proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword
mov ebx, [irq] ;irq num
test ebx, ebx
@@ -25,13 +25,23 @@ proc attach_int_handler stdcall, irq:dword, handler:dword
test eax, eax
jz .err
cmp [irq_owner + 4 * ebx], 0
jne .err
je @f
mov ecx, [irq_rights + 4 * ebx] ; Rights : 0 - full access, 1 - read only, 2 - forbidden
test ecx, ecx
jnz .err
@@:
mov [irq_tab+ebx*4], eax
mov eax, [access_rights]
mov [irq_rights + 4 * ebx], eax
;push eax
;mov eax, [TASK_BASE]
;mov eax, [eax + TASKDATA.pid]
mov [irq_owner + 4 * ebx], 1
;mov eax, [eax + TASKDATA.pid] ; faster or smaller? :)
call get_pid
mov [irq_owner + 4 * ebx], eax
;pop eax
stdcall enable_irq, [irq]
@@ -41,6 +51,28 @@ proc attach_int_handler stdcall, irq:dword, handler:dword
ret
endp
uglobal
irq_rights rd 16
endg
proc get_int_handler stdcall, irq:dword
mov eax, [irq]
cmp [irq_rights + 4 * eax], dword 1
ja .err
mov eax, [irq_tab + 4 * eax]
ret
.err:
xor eax, eax
ret
endp
align 4
proc detach_int_handler
+2
View File
@@ -16,6 +16,7 @@ iglobal
szGetService db 'GetService',0
szServiceHandler db 'ServiceHandler',0
szAttachIntHandler db 'AttachIntHandler',0
szGetIntHandler db 'GetIntHandler', 0
szFpuSave db 'FpuSave',0
szFpuRestore db 'FpuRestore',0
szReservePortArea db 'ReservePortArea',0
@@ -88,6 +89,7 @@ kernel_export:
dd szGetService , get_service
dd szServiceHandler , srv_handler
dd szAttachIntHandler, attach_int_handler
dd szGetIntHandler , get_int_handler
dd szFpuSave , fpu_save
dd szFpuRestore , fpu_restore
dd szReservePortArea , r_f_port_area
+9 -4
View File
@@ -668,13 +668,18 @@ term9:
shl eax, 5
mov eax,[eax+CURRENT_TASK+TASKDATA.pid]
mov edi,irq_owner
mov ecx,16
xor ebx, ebx
xor edx, edx
newirqfree:
scasd
cmp [edi + 4 * ebx], eax
jne nofreeirq
mov [edi-4],dword 0
mov [edi + 4 * ebx], edx ; remove irq reservation
mov [irq_tab + 4 * ebx], edx ; remove irq handler
mov [irq_rights + 4 * ebx], edx ; set access rights to full access
nofreeirq:
loop newirqfree
inc ebx
cmp ebx, 16
jb newirqfree
popa
pusha ; remove all port reservations
File diff suppressed because it is too large Load Diff
+5 -3
View File
@@ -3,6 +3,8 @@
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;;
;; ;;
;; Includes source code by Kulakov Vladimir Gennadievich. ;;
;; Modified by Mario79 and Rus. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;driver sceletone
@@ -66,7 +68,7 @@ end if
mov al, 1
out dx, al
stdcall AttachIntHandler, 4, irq4_handler
stdcall AttachIntHandler, 4, irq4_handler, dword 0
if DEBUG
cmp eax, 0
jne .label1
@@ -99,7 +101,7 @@ end if
;mov [com2_mouse_detected],1
;mov [irq_owner+3*4], 1 ; IRQ3 owner is System
stdcall AttachIntHandler, 3, irq3_handler
stdcall AttachIntHandler, 3, irq3_handler, dword 0
mov eax, 0
mov ebx, 0x2F8
@@ -358,7 +360,7 @@ COMPortBaseAddr dw 3F8h
version dd (5 shl 16) or (API_VERSION and 0xFFFF)
my_service db 'MY_SERVICE',0 ;max 16 chars include zero
my_service db 'COM_Mouse',0 ;max 16 chars include zero
if DEBUG
msgInit db 'Preved bugoga!',13,10,0
File diff suppressed because it is too large Load Diff
+99 -99
View File
@@ -4,12 +4,12 @@ include 'proc32.inc'
include 'imports.inc'
struc IOCTL
{ .handle dd ?
.io_code dd ?
.input dd ?
.inp_size dd ?
.output dd ?
.out_size dd ?
{ .handle dd ?
.io_code dd ?
.input dd ?
.inp_size dd ?
.output dd ?
.out_size dd ?
}
virtual at 0
@@ -22,7 +22,7 @@ public version
DRV_ENTRY equ 1
DRV_EXIT equ -1
MT_3B equ 0
MT_3B equ 0
MT_3BScroll equ 1
MT_5BScroll equ 2
@@ -33,85 +33,85 @@ section '.flat' code readable align 16
proc START stdcall, state:dword
cmp [state], DRV_ENTRY
jne .fin
cmp [state], DRV_ENTRY
jne .fin
.init:
call detect_mouse
test eax,eax
jnz .exit
call detect_mouse
test eax,eax
jnz .exit
mov [MouseType],MT_3B
mov [MouseType],MT_3B
call try_mode_ID3
test eax,eax
jnz .stop_try
mov [MouseType],MT_3BScroll
call try_mode_ID4
test eax,eax
jnz .stop_try
mov [MouseType],MT_5BScroll
call try_mode_ID3
test eax,eax
jnz .stop_try
mov [MouseType],MT_3BScroll
call try_mode_ID4
test eax,eax
jnz .stop_try
mov [MouseType],MT_5BScroll
.stop_try:
mov bl, 0x20 ; read command byte
call kbd_cmd
cmp ah,1
je .exit
mov bl, 0x20 ; read command byte
call kbd_cmd
cmp ah,1
je .exit
call kbd_read
cmp ah,1
je .exit
call kbd_read
cmp ah,1
je .exit
or al, 10b
push eax
mov bl, 0x60 ; write command byte
call kbd_cmd
cmp ah,1
je .exit
or al, 10b
push eax
mov bl, 0x60 ; write command byte
call kbd_cmd
cmp ah,1
je .exit
pop eax
call kbd_write
cmp ah,1
je .exit
pop eax
call kbd_write
cmp ah,1
je .exit
mov al, 0xF4 ; enable data reporting
call mouse_cmd
mov al, 0xF4 ; enable data reporting
call mouse_cmd
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
stdcall AttachIntHandler, 12, irq_handler
stdcall RegService, my_service, service_proc
ret
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
stdcall AttachIntHandler, 12, irq_handler, dword 0
stdcall RegService, my_service, service_proc
ret
.fin:
;stdcall DetachIntHandler, 12, irq_handler
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
xor eax, eax
ret
;stdcall DetachIntHandler, 12, irq_handler
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
xor eax, eax
ret
.exit:
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
xor eax, eax
ret
mov bl, 0xA7 ; disable mouse interface
call kbd_cmd
mov bl, 0xAE ; enable keyboard interface
call kbd_cmd
xor eax, eax
ret
endp
proc service_proc stdcall, ioctl:dword
mov edi, [ioctl]
mov eax, [edi+IOCTL.io_code]
test eax, eax
jz .getversion
jz .getversion
cmp eax,1
jz .gettype
jz .gettype
.err:
or eax, -1
or eax, -1
ret
.ok:
@@ -120,13 +120,13 @@ proc service_proc stdcall, ioctl:dword
.getversion:
cmp [edi+IOCTL.out_size], 4
jb .err
jb .err
mov edi, [edi+IOCTL.output]
mov dword [edi], PS2_DRV_VER ; version of driver
jmp .ok
.gettype:
cmp [edi+IOCTL.out_size], 4
jb .err
jb .err
mov edi, [edi+IOCTL.output]
mov eax,[MouseType]
mov dword [edi], eax ; mouse type
@@ -138,95 +138,95 @@ detect_mouse:
mov bl, 0xAD ; disable keyboard interface
call kbd_cmd
cmp ah,1
je .fail
je .fail
mov bl, 0xA8 ; enable mouse interface
call kbd_cmd
cmp ah,1
je .fail
je .fail
mov al, 0xFF ; reset
mov al, 0xFF ; reset
call mouse_cmd
jc .fail
jc .fail
call mouse_read
jc .fail
jc .fail
cmp al, 0xAA
jne .fail ; dead mouse
jne .fail ; dead mouse
; get device ID
call mouse_read
jc .fail
jc .fail
cmp al, 0x00
jne .fail ; unknown device
jne .fail ; unknown device
xor eax,eax
ret
.fail:
or eax,-1
or eax,-1
ret
try_mode_ID3:
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;200d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x64 ;100d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x50 ;80d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF2 ;Get device id
call mouse_cmd
jc .fail
jc .fail
call mouse_read
jc .fail
jc .fail
cmp al, 0x03
jne .fail
xor eax,eax
ret
.fail:
or eax,-1
or eax,-1
ret
try_mode_ID4:
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;200d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0xC8 ;100d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF3 ;Set Sample Rate
call mouse_cmd
jc .fail
jc .fail
mov al, 0x50 ;80d
call mouse_cmd
jc .fail
jc .fail
mov al, 0xF2 ;Get device id
call mouse_cmd
jc .fail
jc .fail
call mouse_read
jc .fail
jc .fail
cmp al, 0x04
jne .fail
@@ -234,7 +234,7 @@ try_mode_ID4:
ret
.fail:
or eax,-1
or eax,-1
ret
include 'ps2m_iofuncs.inc'
@@ -242,12 +242,12 @@ include 'ps2m_irqh.inc'
section '.data' data readable writable align 16
version dd 0x00050005
version dd 0x00050005
my_service db 'ps2mouse',0
;iofuncs data
mouse_cmd_byte db 0
mouse_nr_tries db 0
mouse_cmd_byte db 0
mouse_nr_tries db 0
mouse_nr_resends db 0
;hid data
@@ -259,10 +259,10 @@ third_byte db 0
fourth_byte db 0
;main data
MouseType dd 0
MouseType dd 0
XMoving dd 0
YMoving dd 0
ZMoving dd 0
ButtonState dd 0
XMoving dd 0
YMoving dd 0
ZMoving dd 0
ButtonState dd 0
;timerTicks dd 0
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+16 -12
View File
@@ -638,16 +638,6 @@ no_lib_load:
mov [pci_access_enabled],1
;call detect_devices
stdcall load_driver, szPS2MDriver
stdcall load_driver, szCOM_MDriver
; SET MOUSE
mov esi,boot_setmouse
call boot_log
call setmouse
; SET PRELIMINARY WINDOW STACK AND POSITIONS
@@ -748,6 +738,17 @@ no_lib_load:
call set_variables
; SET MOUSE
;call detect_devices
stdcall load_driver, szPS2MDriver
stdcall load_driver, szCOM_MDriver
mov esi,boot_setmouse
call boot_log
call setmouse
; STACK AND FDC
call stack_init
@@ -884,7 +885,7 @@ end if
loop ready_for_irqs ; flush the queue
stdcall attach_int_handler, dword 1, irq1
stdcall attach_int_handler, dword 1, irq1, dword 0
; mov [dma_hdd],1
cmp [IDEContrRegsBaseAddr], 0
@@ -4205,7 +4206,7 @@ reserve_free_irq:
mov ebx, [f_irqs + 4 * eax]
stdcall attach_int_handler, eax, ebx
stdcall attach_int_handler, eax, ebx, dword 0
mov [ecx], edi
@@ -5034,6 +5035,9 @@ syscall_getirqowner: ; GetIrqOwner
cmp ebx,16
jae .err
cmp [irq_rights + 4 * ebx], dword 2
je .err
mov eax,[4 * ebx + irq_owner]
mov [esp+32],eax