forked from KolibriOS/kolibrios
RTL8169: fixed
git-svn-id: svn://kolibrios.org@869 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
ad6f92b5b9
commit
637784b2c1
@ -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"
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user