forked from KolibriOS/kolibrios
remove fn 41,42,44,45
git-svn-id: svn://kolibrios.org@2089 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
f0bb935cd0
commit
b3a861cedd
@ -9,7 +9,7 @@ $Revision$
|
||||
|
||||
|
||||
DRV_COMPAT equ 5 ;minimal required drivers version
|
||||
DRV_CURRENT equ 5 ;current drivers model version
|
||||
DRV_CURRENT equ 6 ;current drivers model version
|
||||
|
||||
DRV_VERSION equ (DRV_COMPAT shl 16) or DRV_CURRENT
|
||||
PID_KERNEL equ 1 ;os_idle thread
|
||||
@ -17,6 +17,9 @@ PID_KERNEL equ 1 ;os_idle thread
|
||||
align 4
|
||||
proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword
|
||||
|
||||
pushfd
|
||||
cli
|
||||
|
||||
push ebx
|
||||
|
||||
mov ebx, [irq] ;irq num
|
||||
@ -27,51 +30,26 @@ proc attach_int_handler stdcall, irq:dword, handler:dword, access_rights:dword
|
||||
mov eax, [handler]
|
||||
test eax, eax
|
||||
jz .err
|
||||
cmp [irq_owner + 4 * ebx], 0
|
||||
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
|
||||
|
||||
mov [irq_owner + 4 * ebx], PID_KERNEL ; all handlers belong to a kernel
|
||||
|
||||
stdcall enable_irq, [irq]
|
||||
pop ebx
|
||||
mov eax, 1
|
||||
popfd
|
||||
ret
|
||||
.err:
|
||||
pop ebx
|
||||
xor eax, eax
|
||||
popfd
|
||||
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
|
||||
|
@ -675,25 +675,6 @@ term9:
|
||||
and [bgrlock], 0
|
||||
@@:
|
||||
|
||||
pusha ; remove all irq reservations
|
||||
mov eax,esi
|
||||
shl eax, 5
|
||||
mov eax,[eax+CURRENT_TASK+TASKDATA.pid]
|
||||
mov edi,irq_owner
|
||||
xor ebx, ebx
|
||||
xor edx, edx
|
||||
newirqfree:
|
||||
cmp [edi + 4 * ebx], eax
|
||||
jne nofreeirq
|
||||
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:
|
||||
inc ebx
|
||||
cmp ebx, 16
|
||||
jb newirqfree
|
||||
popa
|
||||
|
||||
pusha ; remove all port reservations
|
||||
mov edx,esi
|
||||
shl edx, 5
|
||||
|
@ -161,11 +161,11 @@ iglobal
|
||||
dd syscall_drawline ; 38-DrawLine
|
||||
dd sys_getbackground ; 39-GetBackgroundSize,ReadBgrData,.
|
||||
dd set_app_param ; 40-WantEvents
|
||||
dd syscall_getirqowner ; 41-GetIrqOwner
|
||||
dd get_irq_data ; 42-ReadIrqData
|
||||
dd undefined_syscall ; 41- deprecated GetIrqOwner
|
||||
dd undefined_syscall ; 42- deprecated ReadIrqData
|
||||
dd sys_outport ; 43-SendDeviceData
|
||||
dd sys_programirq ; 44-ProgramIrqs
|
||||
dd reserve_free_irq ; 45-ReserveIrq and FreeIrq
|
||||
dd undefined_syscall ; 44- deprecated ProgramIrqs
|
||||
dd undefined_syscall ; 45- deprecated ReserveIrq and FreeIrq
|
||||
dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea
|
||||
dd display_number ; 47-WriteNum
|
||||
dd syscall_display_settings ; 48-SetRedrawType and SetButtonType
|
||||
|
@ -267,9 +267,6 @@ align 16
|
||||
cur_saved_data rb 4096
|
||||
fpu_data: rb 512
|
||||
|
||||
; device irq owners
|
||||
irq_owner rd 16 ; process id
|
||||
|
||||
; on irq read ports
|
||||
|
||||
irq00read rd 16
|
||||
|
@ -363,16 +363,7 @@ proc START stdcall, state:dword
|
||||
call SysMsgBoardStr
|
||||
end if
|
||||
|
||||
mov eax, VALID_IRQ
|
||||
mov ebx, [ctrl.int_line]
|
||||
mov esi, msgInvIRQ
|
||||
bt eax, ebx
|
||||
jnc .fail_msg
|
||||
mov eax, ATTCH_IRQ
|
||||
mov esi, msgAttchIRQ
|
||||
bt eax, ebx
|
||||
jnc .fail_msg
|
||||
|
||||
stdcall AttachIntHandler, ebx, ac97_irq, dword 0
|
||||
.reg:
|
||||
stdcall RegService, sz_sound_srv, service_proc
|
||||
@ -496,6 +487,27 @@ proc ac97_irq
|
||||
call SysMsgBoardStr
|
||||
end if
|
||||
|
||||
mov edx, CTRL_STAT
|
||||
call [ctrl.ctrl_read32]
|
||||
|
||||
cmp eax, 0xffffffff
|
||||
je .exit
|
||||
|
||||
test eax, 0x40
|
||||
jnz .do_intr
|
||||
|
||||
test eax, eax
|
||||
jz .exit
|
||||
|
||||
mov edx, CTRL_STAT
|
||||
call [ctrl.ctrl_write32]
|
||||
.exit:
|
||||
xor eax, eax
|
||||
ret
|
||||
|
||||
.do_intr:
|
||||
push eax
|
||||
|
||||
mov edx, PCM_OUT_CR_REG
|
||||
mov al, 0x10; 0x10
|
||||
call [ctrl.ctrl_write8]
|
||||
@ -529,17 +541,21 @@ proc ac97_irq
|
||||
mov ebx, dword [buff_list+eax*4]
|
||||
|
||||
cmp [ctrl.user_callback], 0
|
||||
je @f
|
||||
je .done
|
||||
|
||||
stdcall [ctrl.user_callback], ebx
|
||||
@@:
|
||||
.done:
|
||||
pop eax
|
||||
and eax, 0x40
|
||||
mov edx, CTRL_STAT
|
||||
call [ctrl.ctrl_write32]
|
||||
or eax, 1
|
||||
ret
|
||||
|
||||
.skip:
|
||||
mov edx, PCM_OUT_CR_REG
|
||||
mov ax, 0x11 ;0x1D
|
||||
call [ctrl.ctrl_write8]
|
||||
ret
|
||||
jmp .done
|
||||
endp
|
||||
|
||||
align 4
|
||||
@ -792,6 +808,8 @@ end if
|
||||
and eax, 0xFF
|
||||
mov [ctrl.cfg_reg], eax
|
||||
|
||||
mov [ctrl.user_callback], 0
|
||||
|
||||
call [ctrl.ctrl_setup]
|
||||
xor eax, eax
|
||||
inc eax
|
||||
|
@ -69,9 +69,11 @@ free_cd_channel:
|
||||
jne .IDE_Channel_2
|
||||
.IDE_Channel_1:
|
||||
mov [IDE_Channel_1],0
|
||||
sti
|
||||
ret
|
||||
.IDE_Channel_2:
|
||||
mov [IDE_Channel_2],0
|
||||
sti
|
||||
ret
|
||||
|
||||
uglobal
|
||||
|
@ -435,10 +435,8 @@ get_event_for_app: ;; used from f10,f11,f23
|
||||
jz .no_events ; èñ÷åðïàëè âñå áèòû ìàñêè, íî íè÷åãî íå íàøëè ???
|
||||
btr ecx,eax ; ñáðàñûâàåì ïðîâåðÿåìûé áèò ìàñêè
|
||||
; ïåðåõîäèì íà îáðàáîò÷èê ýòîãî (eax) áèòà
|
||||
cmp eax,16
|
||||
jae .IRQ ; eax=[16..31]=retvals, events irq0..irq15
|
||||
cmp eax,9
|
||||
jae .loop ; eax=[9..15], ignored
|
||||
jae .loop ; eax=[9..31], ignored
|
||||
cmp eax,3
|
||||
je .loop ; eax=3, ignored
|
||||
ja .FlagAutoReset ; eax=[4..8], retvals=eax+1
|
||||
@ -451,16 +449,7 @@ get_event_for_app: ;; used from f10,f11,f23
|
||||
.no_events:
|
||||
xor eax,eax
|
||||
ret
|
||||
.IRQ:
|
||||
;TODO: ñäåëàòü òàê æå, êàê è äëÿ FlagAutoReset (BgrRedraw,Mouse,IPC,Stack,Debug)
|
||||
mov edx,[irq_owner+eax*4-64] ; eax==16+irq
|
||||
cmp edx,[edi+TASKDATA.pid]
|
||||
jne .loop
|
||||
mov edx,eax
|
||||
shl edx,12
|
||||
cmp dword[IRQ_SAVE+edx-0x10000],0 ; edx==(16+irq)*0x1000
|
||||
je .loop ; empty ???
|
||||
ret ; retval = eax
|
||||
|
||||
.FlagAutoReset: ; retvals: BgrRedraw=5, Mouse=6, IPC=7, Stack=8, Debug=9
|
||||
cmp eax,5 ; Mouse 5+1=6
|
||||
jne @f
|
||||
|
@ -1021,7 +1021,6 @@ end if
|
||||
|
||||
jmp osloop
|
||||
|
||||
; jmp $ ; wait here for timer to take control
|
||||
|
||||
; Fly :)
|
||||
|
||||
@ -1121,58 +1120,31 @@ include "kernel32.inc"
|
||||
|
||||
reserve_irqs_ports:
|
||||
|
||||
push eax
|
||||
xor eax,eax
|
||||
inc eax
|
||||
mov byte [irq_owner+4*0],al ;1 ; timer
|
||||
;mov [irq_owner+4*1], 1 ; keyboard
|
||||
mov byte [irq_owner+4*6],al ;1 ; floppy diskette
|
||||
mov byte [irq_owner+4*13],al ;1 ; math co-pros
|
||||
mov byte [irq_owner+4*14],al ;1 ; ide I
|
||||
mov byte [irq_owner+4*15],al ;1 ; ide II
|
||||
pop eax
|
||||
|
||||
; RESERVE PORTS
|
||||
push 4
|
||||
pop dword [RESERVED_PORTS] ;,edi
|
||||
mov eax, RESERVED_PORTS
|
||||
mov ecx, 1
|
||||
|
||||
push 1
|
||||
pop dword [RESERVED_PORTS+16+0] ;,dword 1
|
||||
and dword [RESERVED_PORTS+16+4],0 ;,dword 0x0
|
||||
mov dword [RESERVED_PORTS+16+8],0x2d ;,dword 0x2d
|
||||
mov [eax], dword 4
|
||||
|
||||
push 1
|
||||
pop dword [RESERVED_PORTS+32+0] ;,dword 1
|
||||
push 0x30
|
||||
pop dword [RESERVED_PORTS+32+4] ;,dword 0x30
|
||||
push 0x4d
|
||||
pop dword [RESERVED_PORTS+32+8] ;,dword 0x4d
|
||||
mov [eax+16], ecx
|
||||
mov [eax+16+4], dword 0
|
||||
mov [eax+16+4], dword 0x2D
|
||||
|
||||
push 1
|
||||
pop dword [RESERVED_PORTS+48+0] ;,dword 1
|
||||
push 0x50
|
||||
pop dword [RESERVED_PORTS+48+4] ;,dword 0x50
|
||||
mov dword [RESERVED_PORTS+48+8],0xdf ;,dword 0xdf
|
||||
mov [eax+32], ecx
|
||||
mov [eax+32+4], dword 0x30
|
||||
mov [eax+32+8], dword 0x4D
|
||||
|
||||
push 1
|
||||
pop dword [RESERVED_PORTS+64+0] ;,dword 1
|
||||
mov [eax+48], ecx
|
||||
mov [eax+48+4], dword 0x50
|
||||
mov [eax+28+8], dword 0xDF
|
||||
|
||||
mov dword [RESERVED_PORTS+64+4],0xe5 ;,dword 0xe5
|
||||
mov dword [RESERVED_PORTS+64+8],0xff ;,dword 0xff
|
||||
mov [eax+64], ecx
|
||||
mov [eax+64+4], dword 0xE5
|
||||
mov [eax+64+8], dword 0xFF
|
||||
|
||||
ret
|
||||
|
||||
setirqreadports:
|
||||
|
||||
mov [irq12read+0],dword 0x60 + 0x01000000 ; read port 0x60 , byte
|
||||
and dword [irq12read+4],0 ; end of port list
|
||||
; mov [irq12read+4],dword 0 ; end of port list
|
||||
;mov [irq04read+0],dword 0x3f8 + 0x01000000 ; read port 0x3f8 , byte
|
||||
;mov [irq04read+4],dword 0 ; end of port list
|
||||
;mov [irq03read+0],dword 0x2f8 + 0x01000000 ; read port 0x2f8 , byte
|
||||
;mov [irq03read+4],dword 0 ; end of port list
|
||||
|
||||
ret
|
||||
|
||||
iglobal
|
||||
process_number dd 0x1
|
||||
@ -3480,103 +3452,6 @@ memmove: ; memory move in bytes
|
||||
|
||||
|
||||
align 4
|
||||
|
||||
sys_programirq:
|
||||
|
||||
mov eax, [TASK_BASE]
|
||||
add ebx, [eax + TASKDATA.mem_start]
|
||||
|
||||
cmp ecx, 16
|
||||
jae .not_owner
|
||||
mov edi, [eax + TASKDATA.pid]
|
||||
cmp edi, [irq_owner + 4 * ecx]
|
||||
je .spril1
|
||||
.not_owner:
|
||||
xor ecx, ecx
|
||||
inc ecx
|
||||
jmp .end
|
||||
.spril1:
|
||||
|
||||
shl ecx, 6
|
||||
mov esi, ebx
|
||||
lea edi, [irq00read + ecx]
|
||||
push 16
|
||||
pop ecx
|
||||
|
||||
cld
|
||||
rep movsd
|
||||
.end:
|
||||
mov [esp+32], ecx
|
||||
ret
|
||||
|
||||
|
||||
align 4
|
||||
|
||||
get_irq_data:
|
||||
movzx esi, bh ; save number of subfunction, if bh = 1, return data size, otherwise, read data
|
||||
xor bh, bh
|
||||
cmp ebx, 16
|
||||
jae .not_owner
|
||||
mov edx, [4 * ebx + irq_owner] ; check for irq owner
|
||||
|
||||
mov eax,[TASK_BASE]
|
||||
|
||||
cmp edx,[eax+TASKDATA.pid]
|
||||
je gidril1
|
||||
.not_owner:
|
||||
xor edx, edx
|
||||
dec edx
|
||||
jmp gid1
|
||||
|
||||
gidril1:
|
||||
|
||||
shl ebx, 12
|
||||
lea eax, [ebx + IRQ_SAVE] ; calculate address of the beginning of buffer + 0x0 - data size
|
||||
mov edx, [eax] ; + 0x4 - data offset
|
||||
dec esi
|
||||
jz gid1
|
||||
test edx, edx ; check if buffer is empty
|
||||
jz gid1
|
||||
|
||||
mov ebx, [eax + 0x4]
|
||||
mov edi, ecx
|
||||
|
||||
mov ecx, 4000 ; buffer size, used frequently
|
||||
|
||||
cmp ebx, ecx ; check for the end of buffer, if end of buffer, begin cycle again
|
||||
jb @f
|
||||
|
||||
xor ebx, ebx
|
||||
|
||||
@@:
|
||||
|
||||
lea esi, [ebx + edx] ; calculate data size and offset
|
||||
cld
|
||||
cmp esi, ecx ; if greater than the buffer size, begin cycle again
|
||||
jbe @f
|
||||
|
||||
sub ecx, ebx
|
||||
sub edx, ecx
|
||||
|
||||
lea esi, [eax + ebx + 0x10]
|
||||
rep movsb
|
||||
|
||||
xor ebx, ebx
|
||||
@@:
|
||||
lea esi, [eax + ebx + 0x10]
|
||||
mov ecx, edx
|
||||
add ebx, edx
|
||||
|
||||
rep movsb
|
||||
mov edx, [eax]
|
||||
mov [eax], ecx ; set data size to zero
|
||||
mov [eax + 0x4], ebx ; set data offset
|
||||
|
||||
gid1:
|
||||
mov [esp+32], edx ; eax
|
||||
ret
|
||||
|
||||
|
||||
set_io_access_rights:
|
||||
push edi eax
|
||||
mov edi, tss._io_map_0
|
||||
@ -3588,13 +3463,13 @@ set_io_access_rights:
|
||||
; shl ebx,cl
|
||||
test ebp,ebp
|
||||
; cmp ebp,0 ; enable access - ebp = 0
|
||||
jnz siar1
|
||||
jnz .siar1
|
||||
; not ebx
|
||||
; and [edi],byte bl
|
||||
btr [edi], eax
|
||||
pop eax edi
|
||||
ret
|
||||
siar1:
|
||||
.siar1:
|
||||
bts [edi], eax
|
||||
; or [edi],byte bl ; disable access - ebp = 1
|
||||
pop eax edi
|
||||
@ -3749,66 +3624,7 @@ no_mask_io:
|
||||
ret
|
||||
|
||||
|
||||
reserve_free_irq:
|
||||
|
||||
xor esi, esi
|
||||
inc esi
|
||||
cmp ecx, 16
|
||||
jae ril1
|
||||
|
||||
push ecx
|
||||
lea ecx, [irq_owner + 4 * ecx]
|
||||
mov edx, [ecx]
|
||||
mov eax, [TASK_BASE]
|
||||
mov edi, [eax + TASKDATA.pid]
|
||||
pop eax
|
||||
dec ebx
|
||||
jnz reserve_irq
|
||||
|
||||
cmp edx, edi
|
||||
jne ril1
|
||||
dec esi
|
||||
mov [ecx], esi
|
||||
|
||||
jmp ril1
|
||||
|
||||
reserve_irq:
|
||||
|
||||
cmp dword [ecx], 0
|
||||
jne ril1
|
||||
|
||||
mov ebx, [f_irqs + 4 * eax]
|
||||
|
||||
stdcall attach_int_handler, eax, ebx, dword 0
|
||||
|
||||
mov [ecx], edi
|
||||
|
||||
dec esi
|
||||
ril1:
|
||||
mov [esp+32], esi ; return in eax
|
||||
ret
|
||||
|
||||
iglobal
|
||||
f_irqs:
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd p_irq2
|
||||
dd p_irq3
|
||||
dd p_irq4
|
||||
dd p_irq5
|
||||
dd p_irq6
|
||||
dd p_irq7
|
||||
dd p_irq8
|
||||
dd p_irq9
|
||||
dd p_irq10
|
||||
dd p_irq11
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
dd 0x0
|
||||
|
||||
endg
|
||||
|
||||
align 4
|
||||
drawbackground:
|
||||
inc [mouse_pause]
|
||||
cmp [SCR_MODE],word 0x12
|
||||
@ -4894,26 +4710,9 @@ syscall_drawline: ; DrawLine
|
||||
mov ecx, edx
|
||||
jmp [draw_line]
|
||||
|
||||
align 4
|
||||
|
||||
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
|
||||
|
||||
ret
|
||||
.err:
|
||||
or dword [esp+32], -1
|
||||
ret
|
||||
|
||||
align 4
|
||||
|
||||
syscall_reserveportarea: ; ReservePortArea and FreePortArea
|
||||
|
||||
call r_f_port_area
|
||||
@ -4921,7 +4720,6 @@ syscall_reserveportarea: ; ReservePortArea and FreePortArea
|
||||
ret
|
||||
|
||||
align 4
|
||||
|
||||
syscall_threads: ; CreateThreads
|
||||
; eax=1 create thread
|
||||
;
|
||||
|
@ -70,7 +70,6 @@ block_clip:
|
||||
mov ebp, ecx
|
||||
mov ecx, [ecx]
|
||||
mov edx, [edx]
|
||||
mov eax, ebx
|
||||
call __L1OutCode
|
||||
|
||||
mov esi, eax
|
||||
|
Loading…
Reference in New Issue
Block a user