forked from KolibriOS/kolibrios
Completion of the new SIS900 driver.
-cleanup of used packets after they are sent -transmit function now checks first if the descriptor is free git-svn-id: svn://kolibrios.org@2912 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
8ba3e5e11b
commit
940c0c5fa6
@ -574,6 +574,7 @@ reset:
|
|||||||
out dx, eax
|
out dx, eax
|
||||||
|
|
||||||
mov [device.cur_tx], 0 ; Set current tx descriptor to 0
|
mov [device.cur_tx], 0 ; Set current tx descriptor to 0
|
||||||
|
mov [device.last_tx], 0
|
||||||
|
|
||||||
DEBUGF 1, "Initialising RX Descriptors\n"
|
DEBUGF 1, "Initialising RX Descriptors\n"
|
||||||
|
|
||||||
@ -991,8 +992,8 @@ transmit:
|
|||||||
shl ecx, 4 ; *16
|
shl ecx, 4 ; *16
|
||||||
lea ecx, [device.txd + ecx]
|
lea ecx, [device.txd + ecx]
|
||||||
|
|
||||||
;; TODO: check if desc is empty (for example: check for eax, 0x6200000 at [ecx+4]
|
test dword [ecx + 4], 0x80000000 ; card owns descriptor ?
|
||||||
;;; or: count number of available descriptors
|
jnz .error
|
||||||
|
|
||||||
mov eax, [esp + 4]
|
mov eax, [esp + 4]
|
||||||
mov dword [ecx + 12], eax
|
mov dword [ecx + 12], eax
|
||||||
@ -1121,13 +1122,6 @@ int_handler:
|
|||||||
inc [device.cur_rx] ; get next descriptor
|
inc [device.cur_rx] ; get next descriptor
|
||||||
and [device.cur_rx], NUM_RX_DESC-1 ; only 4 descriptors 0-3
|
and [device.cur_rx], NUM_RX_DESC-1 ; only 4 descriptors 0-3
|
||||||
|
|
||||||
; Enable Receiver CHECKME
|
|
||||||
; set_io 0
|
|
||||||
; set_io cr ; Command Register offset
|
|
||||||
; in eax, dx ; Get current Command Register
|
|
||||||
; or eax, RxENA ; Enable Receiver
|
|
||||||
; out dx, eax
|
|
||||||
|
|
||||||
pop ax
|
pop ax
|
||||||
|
|
||||||
.no_rx:
|
.no_rx:
|
||||||
@ -1136,8 +1130,24 @@ int_handler:
|
|||||||
|
|
||||||
DEBUGF 1, "TX ok!\n"
|
DEBUGF 1, "TX ok!\n"
|
||||||
|
|
||||||
;;; TODO: free all unused buffers
|
.tx_loop:
|
||||||
;; stdcall KernelFree, eax
|
movzx ecx, [device.last_tx]
|
||||||
|
shl ecx, 4 ; *16
|
||||||
|
lea ecx, [device.txd + ecx]
|
||||||
|
|
||||||
|
test dword [ecx + 4], 0x80000000 ; card owns descr
|
||||||
|
jnz .no_tx
|
||||||
|
cmp dword [ecx + 12], 0
|
||||||
|
je .no_tx
|
||||||
|
|
||||||
|
DEBUGF 1, "Freeing packet = %x\n", [ecx + 12]:8
|
||||||
|
push dword [ecx + 12]
|
||||||
|
mov dword [ecx + 12], 0
|
||||||
|
call KernelFree
|
||||||
|
|
||||||
|
inc [device.last_tx]
|
||||||
|
and [device.last_tx], NUM_TX_DESC-1
|
||||||
|
jmp .tx_loop
|
||||||
|
|
||||||
.no_tx:
|
.no_tx:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user