forked from KolibriOS/kolibrios
Small bugfixes. Fixed stack problem in ftdi_set_baudrate. Updated license header
git-svn-id: svn://kolibrios.org@5035 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
69c37e86f7
commit
21cbeaec75
@ -3,6 +3,13 @@
|
|||||||
;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;;
|
;; Copyright (C) KolibriOS team 2004-2014. All rights reserved. ;;
|
||||||
;; Distributed under terms of the GNU General Public License ;;
|
;; Distributed under terms of the GNU General Public License ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
|
;; FTDI chips driver for KolibriOS ;;
|
||||||
|
;; ;;
|
||||||
|
;; Written by gtament@gmail.com ;;
|
||||||
|
;; ;;
|
||||||
|
;; GNU GENERAL PUBLIC LICENSE ;;
|
||||||
|
;; Version 2, June 1991 ;;
|
||||||
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
format MS COFF
|
format MS COFF
|
||||||
@ -15,10 +22,10 @@ __DEBUG_LEVEL__ = 1
|
|||||||
node equ ftdi_context
|
node equ ftdi_context
|
||||||
node.next equ ftdi_context.next_context
|
node.next equ ftdi_context.next_context
|
||||||
|
|
||||||
include '../../proc32.inc'
|
include '../proc32.inc'
|
||||||
include '../../imports.inc'
|
include '../imports.inc'
|
||||||
include '../../fdo.inc'
|
include '../fdo.inc'
|
||||||
include '../../struct.inc'
|
include '../struct.inc'
|
||||||
|
|
||||||
public START
|
public START
|
||||||
public version
|
public version
|
||||||
@ -310,7 +317,9 @@ endl
|
|||||||
jz .ftdi_unlock ;3
|
jz .ftdi_unlock ;3
|
||||||
|
|
||||||
mov ebx, [esi+4]
|
mov ebx, [esi+4]
|
||||||
mov ecx, [ebx + ftdi_context.lockPID]
|
mov ecx, [ebx + ftdi_context.lockPID]
|
||||||
|
cmp dword[esi], 0
|
||||||
|
jz .error
|
||||||
cmp ecx, [esi]
|
cmp ecx, [esi]
|
||||||
jz .pid_ok
|
jz .pid_ok
|
||||||
mov esi, [edi+output]
|
mov esi, [edi+output]
|
||||||
@ -390,6 +399,7 @@ endl
|
|||||||
mov esi, [edi+output]
|
mov esi, [edi+output]
|
||||||
mov [esi], dword 'ERR0'
|
mov [esi], dword 'ERR0'
|
||||||
or [esi], eax
|
or [esi], eax
|
||||||
|
ret
|
||||||
.endswitch:
|
.endswitch:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
@ -408,7 +418,7 @@ endl
|
|||||||
jmp .endswitch
|
jmp .endswitch
|
||||||
|
|
||||||
.ftdi_out_control_transfer_withinp:
|
.ftdi_out_control_transfer_withinp:
|
||||||
mov dx, word[edi+8]
|
mov dx, word[edi+8]
|
||||||
mov word[ConfPacket+2], dx
|
mov word[ConfPacket+2], dx
|
||||||
.ftdi_out_control_transfer_noinp:
|
.ftdi_out_control_transfer_noinp:
|
||||||
mov ebx, [edi+4]
|
mov ebx, [edi+4]
|
||||||
@ -430,27 +440,27 @@ endl
|
|||||||
jmp .endswitch
|
jmp .endswitch
|
||||||
|
|
||||||
.ftdi_setrtshigh:
|
.ftdi_setrtshigh:
|
||||||
DEBUGF 1,'K : FTDI Setting RTS pin HIGH\n'
|
;DEBUGF 1,'K : FTDI Setting RTS pin HIGH\n'
|
||||||
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_RTS_HIGH shl 16)
|
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_RTS_HIGH shl 16)
|
||||||
jmp .ftdi_out_control_transfer_noinp
|
jmp .ftdi_out_control_transfer_noinp
|
||||||
|
|
||||||
.ftdi_setrtslow:
|
.ftdi_setrtslow:
|
||||||
DEBUGF 1,'K : FTDI Setting RTS pin LOW\n'
|
;DEBUGF 1,'K : FTDI Setting RTS pin LOW\n'
|
||||||
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_RTS_LOW shl 16)
|
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_RTS_LOW shl 16)
|
||||||
jmp .ftdi_out_control_transfer_noinp
|
jmp .ftdi_out_control_transfer_noinp
|
||||||
|
|
||||||
.ftdi_setdtrhigh:
|
.ftdi_setdtrhigh:
|
||||||
DEBUGF 1,'K : FTDI Setting DTR pin HIGH\n'
|
;DEBUGF 1,'K : FTDI Setting DTR pin HIGH\n'
|
||||||
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_DTR_HIGH shl 16)
|
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_DTR_HIGH shl 16)
|
||||||
jmp .ftdi_out_control_transfer_noinp
|
jmp .ftdi_out_control_transfer_noinp
|
||||||
|
|
||||||
.ftdi_setdtrlow:
|
.ftdi_setdtrlow:
|
||||||
DEBUGF 1,'K : FTDI Setting DTR pin LOW\n'
|
;DEBUGF 1,'K : FTDI Setting DTR pin LOW\n'
|
||||||
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_DTR_LOW shl 16)
|
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_MODEM_CTRL_REQUEST shl 8) + (SIO_SET_DTR_LOW shl 16)
|
||||||
jmp .ftdi_out_control_transfer_noinp
|
jmp .ftdi_out_control_transfer_noinp
|
||||||
|
|
||||||
.ftdi_usb_reset:
|
.ftdi_usb_reset:
|
||||||
DEBUGF 1,'K : FTDI Reseting\n'
|
;DEBUGF 1,'K : FTDI Reseting\n'
|
||||||
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_RESET_REQUEST shl 8) + (SIO_RESET_SIO shl 16)
|
mov dword[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_RESET_REQUEST shl 8) + (SIO_RESET_SIO shl 16)
|
||||||
jmp .ftdi_out_control_transfer_noinp
|
jmp .ftdi_out_control_transfer_noinp
|
||||||
|
|
||||||
@ -463,7 +473,6 @@ endl
|
|||||||
jmp .ftdi_out_control_transfer_noinp
|
jmp .ftdi_out_control_transfer_noinp
|
||||||
|
|
||||||
.ftdi_set_bitmode:
|
.ftdi_set_bitmode:
|
||||||
DEBUGF 1,'K : FTDI Seting bitmode\n'
|
|
||||||
mov word[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_BITMODE_REQUEST shl 8)
|
mov word[ConfPacket], (FTDI_DEVICE_OUT_REQTYPE) + (SIO_SET_BITMODE_REQUEST shl 8)
|
||||||
jmp .ftdi_out_control_transfer_withinp
|
jmp .ftdi_out_control_transfer_withinp
|
||||||
|
|
||||||
@ -591,7 +600,7 @@ endl
|
|||||||
mov edi, [ioctl]
|
mov edi, [ioctl]
|
||||||
mov esi, [edi+input]
|
mov esi, [edi+input]
|
||||||
mov edi, [edi+output]
|
mov edi, [edi+output]
|
||||||
mov ebx, [esi+4]
|
mov ebx, [esi+4]
|
||||||
;---Dirty hack begin
|
;---Dirty hack begin
|
||||||
mov eax, [esi+8]
|
mov eax, [esi+8]
|
||||||
call Kmalloc
|
call Kmalloc
|
||||||
@ -602,7 +611,7 @@ endl
|
|||||||
jmp .eventdestroy
|
jmp .eventdestroy
|
||||||
@@:
|
@@:
|
||||||
mov edi, eax
|
mov edi, eax
|
||||||
mov dword[ConfPacket], eax
|
mov dword[ConfPacket], eax ; Store in ConfPAcket ptr to allocated memory
|
||||||
;---Dirty hack end
|
;---Dirty hack end
|
||||||
xor ecx, ecx
|
xor ecx, ecx
|
||||||
.read_loop:
|
.read_loop:
|
||||||
@ -628,6 +637,7 @@ endl
|
|||||||
cmp [EventData+8], -1
|
cmp [EventData+8], -1
|
||||||
jz .error
|
jz .error
|
||||||
add ecx, [EventData+8]
|
add ecx, [EventData+8]
|
||||||
|
DEBUGF 1, 'K : In buffer %x\n', [edi]
|
||||||
jmp .read_loop
|
jmp .read_loop
|
||||||
;---Dirty hack begin
|
;---Dirty hack begin
|
||||||
.read_end:
|
.read_end:
|
||||||
@ -705,13 +715,12 @@ endl
|
|||||||
jmp .endswitch
|
jmp .endswitch
|
||||||
|
|
||||||
.ftdi_lock:
|
.ftdi_lock:
|
||||||
DEBUGF 1, 'K : FTDI lock attempt\n'
|
|
||||||
mov esi, [edi+input]
|
mov esi, [edi+input]
|
||||||
mov ebx, [esi+4]
|
mov ebx, [esi+4]
|
||||||
mov eax, [ebx + ftdi_context.lockPID]
|
mov eax, [ebx + ftdi_context.lockPID]
|
||||||
|
DEBUGF 1, 'K : to PID %x from PID %x\n', [esi], eax
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jnz .lockedby
|
jnz .lockedby
|
||||||
DEBUGF 1, 'K : Lock success\n'
|
|
||||||
mov eax, [esi]
|
mov eax, [esi]
|
||||||
mov [ebx + ftdi_context.lockPID], eax
|
mov [ebx + ftdi_context.lockPID], eax
|
||||||
.lockedby:
|
.lockedby:
|
||||||
@ -724,6 +733,7 @@ endl
|
|||||||
mov edi, [edi+output]
|
mov edi, [edi+output]
|
||||||
mov ebx, [esi+4]
|
mov ebx, [esi+4]
|
||||||
mov eax, [ebx + ftdi_context.lockPID]
|
mov eax, [ebx + ftdi_context.lockPID]
|
||||||
|
DEBUGF 1, 'K : to PID %x from PID %x\n', [esi], eax
|
||||||
cmp eax, [esi]
|
cmp eax, [esi]
|
||||||
jnz .unlockimp
|
jnz .unlockimp
|
||||||
mov [ebx + ftdi_context.lockPID], 0
|
mov [ebx + ftdi_context.lockPID], 0
|
||||||
@ -842,13 +852,12 @@ C_CLK = 48000000
|
|||||||
.rounddownbaud:
|
.rounddownbaud:
|
||||||
mov edx, eax ; edx - encoded_divisor
|
mov edx, eax ; edx - encoded_divisor
|
||||||
shr edx, 3
|
shr edx, 3
|
||||||
and eax, 0x7
|
and eax, 0x7
|
||||||
push esp
|
push 7 6 5 1 4 2 3 0
|
||||||
push 7 6 5 1 4 2 3 0
|
|
||||||
mov eax, [esp+eax*4]
|
mov eax, [esp+eax*4]
|
||||||
shl eax, 14
|
shl eax, 14
|
||||||
or edx, eax
|
or edx, eax
|
||||||
mov esp, [esp+36]
|
add esp, 32
|
||||||
|
|
||||||
.calcend:
|
.calcend:
|
||||||
mov eax, edx ; eax - *value
|
mov eax, edx ; eax - *value
|
||||||
|
Loading…
Reference in New Issue
Block a user