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

View File

@ -82,7 +82,7 @@ proc START stdcall, state:dword
mov bl, 0xAE ; enable keyboard interface mov bl, 0xAE ; enable keyboard interface
call kbd_cmd call kbd_cmd
stdcall AttachIntHandler, 12, irq_handler stdcall AttachIntHandler, 12, irq_handler, dword 0
stdcall RegService, my_service, service_proc stdcall RegService, my_service, service_proc
ret ret

View File

@ -349,7 +349,7 @@ proc START stdcall, state:dword
bt eax, ebx bt eax, ebx
jnc .fail_msg jnc .fail_msg
stdcall AttachIntHandler, ebx, ac97_irq stdcall AttachIntHandler, ebx, ac97_irq, dword 0
.reg: .reg:
stdcall RegService, sz_sound_srv, service_proc stdcall RegService, sz_sound_srv, service_proc

View File

@ -13,7 +13,7 @@ $Revision$
; Modifyed by BadBugsKiller 12.01.2004 17:45 ; Modifyed by BadBugsKiller 12.01.2004 17:45
; Шрифт уменьшен в размере и теперь состоит из 2-ух частей, ; Шрифт уменьшен в размере и теперь состоит из 2-ух частей,
; содержащих только символы русского алфавита. ; содержащих только символы русского алфавита.
; символы в кодировке ASCII (ДОС'овская), кодовая станица 866. ; символы в кодировке ASCII (ДОС'овская), кодовая страница 866.
RU_FNT1: RU_FNT1:
db 0x00, 0x00, 0x1E, 0x36, 0x66, 0xC6, 0xC6, 0xFE, 0xC6, 0xC6, 0xC6, 0xC6, 0x00, 0x00, 0x00, 0x00 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 db 0x00, 0x00, 0xFE, 0x62, 0x60, 0x60, 0x7C, 0x66, 0x66, 0x66, 0x66, 0xFC, 0x00, 0x00, 0x00, 0x00

View File

@ -14,7 +14,7 @@ DRV_CURRENT equ 5 ;current drivers model version
DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT
align 4 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 mov ebx, [irq] ;irq num
test ebx, ebx test ebx, ebx
@ -25,13 +25,23 @@ proc attach_int_handler stdcall, irq:dword, handler:dword
test eax, eax test eax, eax
jz .err jz .err
cmp [irq_owner + 4 * ebx], 0 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 [irq_tab+ebx*4], eax
mov eax, [access_rights]
mov [irq_rights + 4 * ebx], eax
;push eax ;push eax
;mov eax, [TASK_BASE] ;mov eax, [TASK_BASE]
;mov eax, [eax + TASKDATA.pid] ;mov eax, [eax + TASKDATA.pid] ; faster or smaller? :)
mov [irq_owner + 4 * ebx], 1 call get_pid
mov [irq_owner + 4 * ebx], eax
;pop eax ;pop eax
stdcall enable_irq, [irq] stdcall enable_irq, [irq]
@ -41,6 +51,28 @@ proc attach_int_handler stdcall, irq:dword, handler:dword
ret ret
endp 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 align 4
proc detach_int_handler proc detach_int_handler

View File

@ -16,6 +16,7 @@ iglobal
szGetService db 'GetService',0 szGetService db 'GetService',0
szServiceHandler db 'ServiceHandler',0 szServiceHandler db 'ServiceHandler',0
szAttachIntHandler db 'AttachIntHandler',0 szAttachIntHandler db 'AttachIntHandler',0
szGetIntHandler db 'GetIntHandler', 0
szFpuSave db 'FpuSave',0 szFpuSave db 'FpuSave',0
szFpuRestore db 'FpuRestore',0 szFpuRestore db 'FpuRestore',0
szReservePortArea db 'ReservePortArea',0 szReservePortArea db 'ReservePortArea',0
@ -88,6 +89,7 @@ kernel_export:
dd szGetService , get_service dd szGetService , get_service
dd szServiceHandler , srv_handler dd szServiceHandler , srv_handler
dd szAttachIntHandler, attach_int_handler dd szAttachIntHandler, attach_int_handler
dd szGetIntHandler , get_int_handler
dd szFpuSave , fpu_save dd szFpuSave , fpu_save
dd szFpuRestore , fpu_restore dd szFpuRestore , fpu_restore
dd szReservePortArea , r_f_port_area dd szReservePortArea , r_f_port_area

View File

@ -668,13 +668,18 @@ term9:
shl eax, 5 shl eax, 5
mov eax,[eax+CURRENT_TASK+TASKDATA.pid] mov eax,[eax+CURRENT_TASK+TASKDATA.pid]
mov edi,irq_owner mov edi,irq_owner
mov ecx,16 xor ebx, ebx
xor edx, edx
newirqfree: newirqfree:
scasd cmp [edi + 4 * ebx], eax
jne nofreeirq 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: nofreeirq:
loop newirqfree inc ebx
cmp ebx, 16
jb newirqfree
popa popa
pusha ; remove all port reservations pusha ; remove all port reservations

View File

@ -576,7 +576,8 @@ endp
align 4 align 4
get_pid: get_pid:
mov eax, [TASK_DATA] ;mov eax, [TASK_DATA] ; I think it's the bug. (Rus)
mov eax, [TASK_BASE]
mov eax, [eax+4] mov eax, [eax+4]
ret ret

View File

@ -3,6 +3,8 @@
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;; ;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License ;; ;; Distributed under terms of the GNU General Public License ;;
;; ;; ;; ;;
;; Includes source code by Kulakov Vladimir Gennadievich. ;;
;; Modified by Mario79 and Rus. ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;driver sceletone ;driver sceletone
@ -66,7 +68,7 @@ end if
mov al, 1 mov al, 1
out dx, al out dx, al
stdcall AttachIntHandler, 4, irq4_handler stdcall AttachIntHandler, 4, irq4_handler, dword 0
if DEBUG if DEBUG
cmp eax, 0 cmp eax, 0
jne .label1 jne .label1
@ -99,7 +101,7 @@ end if
;mov [com2_mouse_detected],1 ;mov [com2_mouse_detected],1
;mov [irq_owner+3*4], 1 ; IRQ3 owner is System ;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 eax, 0
mov ebx, 0x2F8 mov ebx, 0x2F8
@ -358,7 +360,7 @@ COMPortBaseAddr dw 3F8h
version dd (5 shl 16) or (API_VERSION and 0xFFFF) 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 if DEBUG
msgInit db 'Preved bugoga!',13,10,0 msgInit db 'Preved bugoga!',13,10,0

View File

@ -329,7 +329,7 @@ proc START stdcall, state:dword
bt eax, ebx bt eax, ebx
jnc .fail jnc .fail
stdcall AttachIntHandler, ebx, ac97_irq stdcall AttachIntHandler, ebx, ac97_irq, dword 0
stdcall RegService, sz_sound_srv, service_proc stdcall RegService, sz_sound_srv, service_proc
ret ret
.fail: .fail:

View File

@ -82,7 +82,7 @@ proc START stdcall, state:dword
mov bl, 0xAE ; enable keyboard interface mov bl, 0xAE ; enable keyboard interface
call kbd_cmd call kbd_cmd
stdcall AttachIntHandler, 12, irq_handler stdcall AttachIntHandler, 12, irq_handler, dword 0
stdcall RegService, my_service, service_proc stdcall RegService, my_service, service_proc
ret ret

View File

@ -349,7 +349,7 @@ proc START stdcall, state:dword
bt eax, ebx bt eax, ebx
jnc .fail_msg jnc .fail_msg
stdcall AttachIntHandler, ebx, ac97_irq stdcall AttachIntHandler, ebx, ac97_irq, dword 0
.reg: .reg:
stdcall RegService, sz_sound_srv, service_proc stdcall RegService, sz_sound_srv, service_proc
ret ret

View File

@ -372,7 +372,7 @@ proc START stdcall, state:dword
bt eax, ebx bt eax, ebx
jnc .fail_msg jnc .fail_msg
stdcall AttachIntHandler, ebx, ac97_irq stdcall AttachIntHandler, ebx, ac97_irq, dword 0
.reg: .reg:
stdcall RegService, sz_sound_srv, service_proc stdcall RegService, sz_sound_srv, service_proc
ret ret

View File

@ -278,7 +278,7 @@ proc START stdcall, state:dword
mov eax, edi mov eax, edi
call uart_reset.internal ;eax= uart call uart_reset.internal ;eax= uart
stdcall AttachIntHandler, COM_1_IRQ, com_1_isr stdcall AttachIntHandler, COM_1_IRQ, com_1_isr, dword 0
stdcall RegService, sz_uart_srv, service_proc stdcall RegService, sz_uart_srv, service_proc
ret ret
.fail: .fail:

View File

@ -638,16 +638,6 @@ no_lib_load:
mov [pci_access_enabled],1 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 ; SET PRELIMINARY WINDOW STACK AND POSITIONS
@ -748,6 +738,17 @@ no_lib_load:
call set_variables 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 ; STACK AND FDC
call stack_init call stack_init
@ -884,7 +885,7 @@ end if
loop ready_for_irqs ; flush the queue 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 ; mov [dma_hdd],1
cmp [IDEContrRegsBaseAddr], 0 cmp [IDEContrRegsBaseAddr], 0
@ -4205,7 +4206,7 @@ reserve_free_irq:
mov ebx, [f_irqs + 4 * eax] mov ebx, [f_irqs + 4 * eax]
stdcall attach_int_handler, eax, ebx stdcall attach_int_handler, eax, ebx, dword 0
mov [ecx], edi mov [ecx], edi
@ -5034,6 +5035,9 @@ syscall_getirqowner: ; GetIrqOwner
cmp ebx,16 cmp ebx,16
jae .err jae .err
cmp [irq_rights + 4 * ebx], dword 2
je .err
mov eax,[4 * ebx + irq_owner] mov eax,[4 * ebx + irq_owner]
mov [esp+32],eax mov [esp+32],eax