RTL8169: fixed

git-svn-id: svn://kolibrios.org@869 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Dmitry Kartashov (shurf) 2008-09-28 22:32:32 +00:00
parent ad6f92b5b9
commit 637784b2c1
2 changed files with 20 additions and 10 deletions

View File

@ -1,4 +1,4 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;; ;; ;;
;; 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 ;;
@ -339,7 +339,7 @@ rtl8169_txb rb NUM_TX_DESC * RX_BUF_SIZE
; Define the RX Descriptor ; Define the RX Descriptor
align 256 align 256
rtl8169_rx_ring rb NUM_RX_DESC * sizeof.rtl8169_TxDesc rtl8169_rx_ring rb NUM_RX_DESC * sizeof.rtl8169_RxDesc
; Create a static buffer of size RX_BUF_SZ for each ; Create a static buffer of size RX_BUF_SZ for each
; RX Descriptor All descriptors point to a ; RX Descriptor All descriptors point to a
@ -716,21 +716,21 @@ endp
proc RTL8169_WRITE_GMII_REG,RegAddr:byte,value:dword proc RTL8169_WRITE_GMII_REG,RegAddr:byte,value:dword
DEBUGF 1,"K : RTL8169_WRITE_GMII_REG: 0x%x 0x%x\n",[RegAddr]:2,[value] ;;; DEBUGF 1,"K : RTL8169_WRITE_GMII_REG: 0x%x 0x%x\n",[RegAddr]:2,[value]
movzx eax,[RegAddr] movzx eax,[RegAddr]
shl eax,16 shl eax,16
or eax,[value] or eax,[value]
or eax,0x80000000 or eax,0x80000000
RTL_W32 RTL8169_REG_PHYAR,eax RTL_W32 RTL8169_REG_PHYAR,eax
stdcall udelay,1000 stdcall udelay,1 ;;;1000
mov ecx,2000 mov ecx,2000
; Check if the RTL8169 has completed writing to the specified MII register ; Check if the RTL8169 has completed writing to the specified MII register
@@: RTL_R32 RTL8169_REG_PHYAR @@: RTL_R32 RTL8169_REG_PHYAR
test eax,0x80000000 test eax,0x80000000
jz .exit jz .exit
stdcall udelay,100 stdcall udelay,1 ;;;100
loop @b loop @b
.exit: .exit:
ret ret
@ -738,21 +738,21 @@ endp
proc RTL8169_READ_GMII_REG,RegAddr:byte proc RTL8169_READ_GMII_REG,RegAddr:byte
DEBUGF 1,"K : RTL8169_READ_GMII_REG: 0x%x\n",[RegAddr]:2 ;;; DEBUGF 1,"K : RTL8169_READ_GMII_REG: 0x%x\n",[RegAddr]:2
push ecx push ecx
movzx eax,[RegAddr] movzx eax,[RegAddr]
shl eax,16 shl eax,16
; or eax,0x0 ; or eax,0x0
RTL_W32 RTL8169_REG_PHYAR,eax RTL_W32 RTL8169_REG_PHYAR,eax
stdcall udelay,1000 stdcall udelay,1 ;;;1000
mov ecx,2000 mov ecx,2000
; Check if the RTL8169 has completed retrieving data from the specified MII register ; Check if the RTL8169 has completed retrieving data from the specified MII register
@@: RTL_R32 RTL8169_REG_PHYAR @@: RTL_R32 RTL8169_REG_PHYAR
test eax,0x80000000 test eax,0x80000000
jnz .exit jnz .exit
stdcall udelay,100 stdcall udelay,1 ;;;100
loop @b loop @b
or eax,-1 or eax,-1
@ -820,6 +820,7 @@ proc rtl8169_init_ring
mov ecx,NUM_RX_DESC mov ecx,NUM_RX_DESC
@@: mov [esi],eax @@: mov [esi],eax
mov [edi+rtl8169_RxDesc.buf_addr],eax mov [edi+rtl8169_RxDesc.buf_addr],eax
sub [edi+rtl8169_RxDesc.buf_addr],OS_BASE ; shurf 28.09.2008
mov [edi+rtl8169_RxDesc.status],RTL8169_DSB_OWNbit or RX_BUF_SIZE mov [edi+rtl8169_RxDesc.status],RTL8169_DSB_OWNbit or RX_BUF_SIZE
add esi,4 add esi,4
add edi,sizeof.rtl8169_RxDesc add edi,sizeof.rtl8169_RxDesc
@ -879,8 +880,14 @@ proc rtl8169_hw_start
RTL_W16 0xE2,0x0000 RTL_W16 0xE2,0x0000
MOV [rtl8169_tpc.cur_rx],0 MOV [rtl8169_tpc.cur_rx],0
RTL_W32 RTL8169_REG_TxDescStartAddr,[rtl8169_tpc.TxDescArray] push eax ; shurf 28.09.2008
RTL_W32 RTL8169_REG_RxDescStartAddr,[rtl8169_tpc.RxDescArray] mov eax, [rtl8169_tpc.TxDescArray] ; shurf 28.09.2008
sub eax, OS_BASE ; shurf 28.09.2008
RTL_W32 RTL8169_REG_TxDescStartAddr,eax ;[rtl8169_tpc.TxDescArray] ; shurf 28.09.2008
mov eax, [rtl8169_tpc.RxDescArray] ; shurf 28.09.2008
sub eax, OS_BASE ; shurf 28.09.2008
RTL_W32 RTL8169_REG_RxDescStartAddr,eax ;[rtl8169_tpc.RxDescArray] ; shurf 28.09.2008
pop eax ; shurf 28.09.2008
RTL_W8 RTL8169_REG_Cfg9346,RTL8169_CFG_9346_Lock RTL_W8 RTL8169_REG_Cfg9346,RTL8169_CFG_9346_Lock
stdcall udelay,10 stdcall udelay,10
RTL_W32 RTL8169_REG_RxMissed,0 RTL_W32 RTL8169_REG_RxMissed,0
@ -1087,6 +1094,7 @@ proc rtl8169_transmit
add eax,[rtl8169_tpc.TxDescArray] add eax,[rtl8169_tpc.TxDescArray]
xchg eax,ebx xchg eax,ebx
mov [ebx + rtl8169_TxDesc.buf_addr],eax mov [ebx + rtl8169_TxDesc.buf_addr],eax
sub [ebx + rtl8169_TxDesc.buf_addr],OS_BASE ; shurf 28.09.2008
mov eax,ecx mov eax,ecx
cmp eax,ETH_ZLEN cmp eax,ETH_ZLEN
@ -1190,6 +1198,7 @@ proc rtl8169_poll
@@: mov [ebx + rtl8169_RxDesc.status],eax @@: mov [ebx + rtl8169_RxDesc.status],eax
mov [ebx + rtl8169_RxDesc.buf_addr],edx mov [ebx + rtl8169_RxDesc.buf_addr],edx
sub [ebx + rtl8169_RxDesc.buf_addr],OS_BASE ; shurf 28.09.2008
jmp @f jmp @f
.else: .else:
DEBUGF 1,"K : rtl8169_poll: Rx Error\n" DEBUGF 1,"K : rtl8169_poll: Rx Error\n"

View File

@ -154,6 +154,7 @@ dd 0x816810ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
dd 0x816910ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0 dd 0x816910ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
dd 0x011616ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0 dd 0x011616ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
dd 0x43001186, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0 dd 0x43001186, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
dd 0x816710ec, rtl8169_probe, rtl8169_reset, rtl8169_poll, rtl8169_transmit, 0
dd 0x590010b7, e3c59x_probe, e3c59x_reset, e3c59x_poll, e3c59x_transmit, 0 dd 0x590010b7, e3c59x_probe, e3c59x_reset, e3c59x_poll, e3c59x_transmit, 0
dd 0x592010b7, e3c59x_probe, e3c59x_reset, e3c59x_poll, e3c59x_transmit, 0 dd 0x592010b7, e3c59x_probe, e3c59x_reset, e3c59x_poll, e3c59x_transmit, 0