From 6dc97d69a6c8a7d4a20441a67d0383556d61e220 Mon Sep 17 00:00:00 2001 From: "Evgeny Grechnikov (Diamond)" Date: Mon, 16 Feb 2009 11:55:19 +0000 Subject: [PATCH] mouse driver: * removed from /kernel/trunk/drivers/ because /drivers/mouse/ps2mouse4d/ is more recent * removed unnecessary delays git-svn-id: svn://kolibrios.org@1036 a494cfbc-eb01-0410-851d-a64ba20cac60 --- drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc | 22 +- kernel/trunk/drivers/ps2m_iofuncs.inc | 141 ---------- kernel/trunk/drivers/ps2m_irqh.inc | 120 --------- kernel/trunk/drivers/ps2mouse.asm | 270 ------------------- 4 files changed, 11 insertions(+), 542 deletions(-) delete mode 100644 kernel/trunk/drivers/ps2m_iofuncs.inc delete mode 100644 kernel/trunk/drivers/ps2m_irqh.inc delete mode 100644 kernel/trunk/drivers/ps2mouse.asm diff --git a/drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc b/drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc index e9724f0e53..28d738662c 100644 --- a/drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc +++ b/drivers/mouse/ps2mouse4d/trunk/ps2m_irqh.inc @@ -4,7 +4,7 @@ proc irq_handler - call Wait8042BufferEmpty ;clear buffer +; call Wait8042BufferEmpty ;clear buffer in al,0x60 ;get scan-code cmp [mouse_byte],0 @@ -123,13 +123,13 @@ endp ;* ZF is set - good ending, * ;* ZF is cleared - time-out error. * ;*********************************************** -Wait8042BufferEmpty: - push ecx - xor ecx,ecx - @@: - in al,64h - test al,00000010b - loopnz @b - pop ecx - - ret +;Wait8042BufferEmpty: +; push ecx +; xor ecx,ecx +; @@: +; in al,64h +; test al,00000010b +; loopnz @b +; pop ecx +; +; ret diff --git a/kernel/trunk/drivers/ps2m_iofuncs.inc b/kernel/trunk/drivers/ps2m_iofuncs.inc deleted file mode 100644 index 5c5d7d144e..0000000000 --- a/kernel/trunk/drivers/ps2m_iofuncs.inc +++ /dev/null @@ -1,141 +0,0 @@ -kbd_read: - push ecx edx - - mov ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's - kr_loop: - in al,0x64 - test al,1 - jnz kr_ready - loop kr_loop - mov ah,1 - jmp kr_exit - kr_ready: - push ecx - mov ecx,32 - kr_delay: - loop kr_delay - pop ecx - in al,0x60 - xor ah,ah - kr_exit: - pop edx ecx - ret - - -kbd_write: - - push ecx edx - - mov dl,al - in al,0x60 - mov ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's - kw_loop: - in al,0x64 - test al,2 - jz kw_ok - loop kw_loop - mov ah,1 - jmp kw_exit - kw_ok: - mov al,dl - out 0x60,al - mov ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's - kw_loop3: - in al,0x64 - test al,2 - jz kw_ok3 - loop kw_loop3 - mov ah,1 - jmp kw_exit - kw_ok3: - mov ah,8 - kw_loop4: - mov ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's - kw_loop5: - in al,0x64 - test al,1 - jnz kw_ok4 - loop kw_loop5 - dec ah - jnz kw_loop4 - kw_ok4: - xor ah,ah - kw_exit: - pop edx ecx - ret - - -kbd_cmd: - - mov ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's - c_wait: - in al,0x64 - test al,2 - jz c_send - loop c_wait - jmp c_error - c_send: - mov al,bl - out 0x64,al - mov ecx,0x1ffff ; last 0xffff, new value in view of fast CPU's - c_accept: - in al,0x64 - test al,2 - jz c_ok - loop c_accept - c_error: - mov ah,1 - jmp c_exit - c_ok: - xor ah,ah - c_exit: - ret - -mouse_cmd: - mov [mouse_cmd_byte], al - mov [mouse_nr_resends], 5 - .resend: - mov bl, 0xd4 - call kbd_cmd - cmp ah,1 - je .fail - - mov al, [mouse_cmd_byte] - call kbd_write - cmp ah, 1 - je .fail - - call mouse_read - - cmp al, 0xFA - jne .noack - clc - ret - .noack: - cmp al, 0xFE ; resend - jne .noresend - dec [mouse_nr_resends] - jnz .resend - .noresend: - .fail: - stc - ret - - -mouse_read: - mov [mouse_nr_tries], 100 - .repeat: - call kbd_read - cmp ah, 1 - jne .fin - mov esi, 10 - call Sleep - dec [mouse_nr_tries] - jnz .repeat - - stc - ret - - .fin: - clc - ret diff --git a/kernel/trunk/drivers/ps2m_irqh.inc b/kernel/trunk/drivers/ps2m_irqh.inc deleted file mode 100644 index ee6cf3eede..0000000000 --- a/kernel/trunk/drivers/ps2m_irqh.inc +++ /dev/null @@ -1,120 +0,0 @@ -;************************************** -;* IRQ HANDLER FOR PS/2 MOUSE * -;************************************** - -proc irq_handler - - call Wait8042BufferEmpty ;clear buffer - in al,0x60 ;get scan-code - - cmp [mouse_byte],0 - je .byte1 - cmp [mouse_byte],1 - je .byte2 - cmp [mouse_byte],2 - je .byte3 - cmp [mouse_byte],3 - je .byte4 - jmp .error - - .byte1: - test al,1000b ;first byte? - jz .error - mov [first_byte],al - inc [mouse_byte] - jmp .exit - - .byte2: - mov [second_byte],al - inc [mouse_byte] - jmp .exit - - .byte3: - mov [third_byte],al - cmp [MouseType],MT_3B - je .full_packet - inc [mouse_byte] - jmp .exit - - .byte4: - mov [fourth_byte],al - - - .full_packet: - mov [mouse_byte],0 - mov al,byte [first_byte] - and eax,7 - mov byte [ButtonState],al - - cmp [MouseType],MT_3B - je .xy_moving - mov al,[fourth_byte] - cmp [MouseType],MT_3BScroll - je .z_moving - - mov ah,al - and ah,00110000b - shr ah,1 - or byte [ButtonState],ah - and al,00001111b - bt eax,3 - jnc .z_moving - or al,11110000b - - .z_moving: - movsx eax,al - mov [ZMoving],eax - - .xy_moving: - mov ah,0 - mov al,[first_byte] - test al,10000b - jz @f - mov ah,0FFh - - @@: - mov al,[second_byte] - cwd - mov [XMoving],eax - - mov ah,0 - mov al,[first_byte] - test al,100000b - jz @f - mov ah,0FFh - - @@: - mov al,[third_byte] - cwd - - @@: - mov [YMoving],eax - stdcall SetMouseData, [ButtonState], [XMoving], [YMoving], [ZMoving], 0 - - - jmp .exit - - .error: - mov [mouse_byte],0 - - .exit: - ret -endp - - -;*********************************************** -;* Waiting for clearing I8042 buffer * -;* Retutned state: * -;* ZF is set - good ending, * -;* ZF is cleared - time-out error. * -;*********************************************** -Wait8042BufferEmpty: - push ecx - xor ecx,ecx - @@: - in al,64h - test al,00000010b - loopnz @b - pop ecx - - ret diff --git a/kernel/trunk/drivers/ps2mouse.asm b/kernel/trunk/drivers/ps2mouse.asm deleted file mode 100644 index db75673736..0000000000 --- a/kernel/trunk/drivers/ps2mouse.asm +++ /dev/null @@ -1,270 +0,0 @@ -format MS COFF - -DEBUG equ 0 - -include 'proc32.inc' -include 'imports.inc' - -struc IOCTL -{ .handle dd ? - .io_code dd ? - .input dd ? - .inp_size dd ? - .output dd ? - .out_size dd ? -} - -virtual at 0 - IOCTL IOCTL -end virtual - -public START -public version - -DRV_ENTRY equ 1 -DRV_EXIT equ -1 - -MT_3B equ 0 -MT_3BScroll equ 1 -MT_5BScroll equ 2 - -PS2_DRV_VER equ 1 - -section '.flat' code readable align 16 - - -proc START stdcall, state:dword - - cmp [state], DRV_ENTRY - jne .fin - .init: - - call detect_mouse - test eax,eax - jnz .exit - - 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 - - .stop_try: - - mov bl, 0x20 ; read command byte - call kbd_cmd - 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 - - pop eax - call kbd_write - cmp ah,1 - je .exit - - mov al, 0xF4 ; enable data reporting - call mouse_cmd - - 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 - - .exit: - 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 - cmp eax,1 - jz .gettype - - .err: - or eax, -1 - ret - - .ok: - xor eax, eax - ret - - .getversion: - cmp [edi+IOCTL.out_size], 4 - 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 - mov edi, [edi+IOCTL.output] - mov eax,[MouseType] - mov dword [edi], eax ; mouse type - jmp .ok -endp - -detect_mouse: - - mov bl, 0xAD ; disable keyboard interface - call kbd_cmd - cmp ah,1 - je .fail - - mov bl, 0xA8 ; enable mouse interface - call kbd_cmd - cmp ah,1 - je .fail - - mov al, 0xFF ; reset - call mouse_cmd - jc .fail - - call mouse_read - jc .fail - cmp al, 0xAA - jne .fail ; dead mouse - - ; get device ID - call mouse_read - jc .fail - cmp al, 0x00 - jne .fail ; unknown device - xor eax,eax - ret - - .fail: - or eax,-1 - ret - -try_mode_ID3: - mov al, 0xF3 ;Set Sample Rate - call mouse_cmd - jc .fail - mov al, 0xC8 ;200d - call mouse_cmd - jc .fail - mov al, 0xF3 ;Set Sample Rate - call mouse_cmd - jc .fail - mov al, 0x64 ;100d - call mouse_cmd - jc .fail - mov al, 0xF3 ;Set Sample Rate - call mouse_cmd - jc .fail - mov al, 0x50 ;80d - call mouse_cmd - jc .fail - - mov al, 0xF2 ;Get device id - call mouse_cmd - jc .fail - - call mouse_read - jc .fail - cmp al, 0x03 - jne .fail - - xor eax,eax - ret - .fail: - or eax,-1 - ret - -try_mode_ID4: - mov al, 0xF3 ;Set Sample Rate - call mouse_cmd - jc .fail - mov al, 0xC8 ;200d - call mouse_cmd - jc .fail - mov al, 0xF3 ;Set Sample Rate - call mouse_cmd - jc .fail - mov al, 0xC8 ;100d - call mouse_cmd - jc .fail - mov al, 0xF3 ;Set Sample Rate - call mouse_cmd - jc .fail - mov al, 0x50 ;80d - call mouse_cmd - jc .fail - - mov al, 0xF2 ;Get device id - call mouse_cmd - jc .fail - - call mouse_read - jc .fail - cmp al, 0x04 - jne .fail - - xor eax,eax - ret - - .fail: - or eax,-1 - ret - -include 'ps2m_iofuncs.inc' -include 'ps2m_irqh.inc' - -section '.data' data readable writable align 16 - -version dd 0x00050005 -my_service db 'ps2mouse',0 - -;iofuncs data -mouse_cmd_byte db 0 -mouse_nr_tries db 0 -mouse_nr_resends db 0 - -;hid data -mouse_byte dd 0 - -first_byte db 0 -second_byte db 0 -third_byte db 0 -fourth_byte db 0 - -;main data -MouseType dd 0 - -XMoving dd 0 -YMoving dd 0 -ZMoving dd 0 -ButtonState dd 0 -;timerTicks dd 0