forked from KolibriOS/kolibrios
Bugfix in SIS900 init, added some debug output, Bugfix in set_rxd, some refactoring
git-svn-id: svn://kolibrios.org@2909 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0b4a7112cd
commit
c9bbdd57de
@ -25,6 +25,12 @@
|
|||||||
|
|
||||||
format MS COFF
|
format MS COFF
|
||||||
|
|
||||||
|
NUM_RX_DESC = 4 ;* Number of RX descriptors *
|
||||||
|
NUM_TX_DESC = 1 ;* Number of TX descriptors *
|
||||||
|
RX_BUFF_SZ = 1520 ;* Buffer size for each Rx buffer *
|
||||||
|
TX_BUFF_SZ = 1516 ;* Buffer size for each Tx buffer *
|
||||||
|
MAX_ETH_FRAME_SIZE = 1516
|
||||||
|
|
||||||
API_VERSION = 0x01000100
|
API_VERSION = 0x01000100
|
||||||
DRIVER_VERSION = 5
|
DRIVER_VERSION = 5
|
||||||
|
|
||||||
@ -42,12 +48,6 @@ include 'netdrv.inc'
|
|||||||
public START
|
public START
|
||||||
public version
|
public version
|
||||||
|
|
||||||
NUM_RX_DESC = 4 ;* Number of RX descriptors *
|
|
||||||
NUM_TX_DESC = 1 ;* Number of TX descriptors *
|
|
||||||
RX_BUFF_SZ = 1520 ;* Buffer size for each Rx buffer *
|
|
||||||
TX_BUFF_SZ = 1516 ;* Buffer size for each Tx buffer *
|
|
||||||
MAX_ETH_FRAME_SIZE = 1516
|
|
||||||
|
|
||||||
virtual at ebx
|
virtual at ebx
|
||||||
device:
|
device:
|
||||||
|
|
||||||
@ -147,10 +147,10 @@ service_proc:
|
|||||||
jz .firstdevice
|
jz .firstdevice
|
||||||
|
|
||||||
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
; mov eax, [IOCTL.input] ; get the pci bus and device numbers
|
||||||
mov ax , [eax+1] ;
|
mov ax, [eax+1] ;
|
||||||
.nextdevice:
|
.nextdevice:
|
||||||
mov ebx, [esi]
|
mov ebx, [esi]
|
||||||
cmp ax , word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
|
cmp ax, word [device.pci_bus] ; compare with pci and device num in device list (notice the usage of word instead of byte)
|
||||||
je .find_devicenum ; Device is already loaded, let's find it's device number
|
je .find_devicenum ; Device is already loaded, let's find it's device number
|
||||||
add esi, 4
|
add esi, 4
|
||||||
loop .nextdevice
|
loop .nextdevice
|
||||||
@ -164,9 +164,9 @@ service_proc:
|
|||||||
allocate_and_clear ebx, device.size, .fail
|
allocate_and_clear ebx, device.size, .fail
|
||||||
; 4i. Save PCI coordinates
|
; 4i. Save PCI coordinates
|
||||||
mov eax, [IOCTL.input]
|
mov eax, [IOCTL.input]
|
||||||
mov cl , [eax+1]
|
mov cl, [eax+1]
|
||||||
mov [device.pci_bus], cl
|
mov [device.pci_bus], cl
|
||||||
mov cl , [eax+2]
|
mov cl, [eax+2]
|
||||||
mov [device.pci_dev], cl
|
mov [device.pci_dev], cl
|
||||||
; 4j. Fill in the direct call addresses into the struct.
|
; 4j. Fill in the direct call addresses into the struct.
|
||||||
; Note that get_MAC pointer is filled in initialization by probe.
|
; Note that get_MAC pointer is filled in initialization by probe.
|
||||||
@ -222,7 +222,6 @@ service_proc:
|
|||||||
.err:
|
.err:
|
||||||
stdcall KernelFree, ebx
|
stdcall KernelFree, ebx
|
||||||
|
|
||||||
|
|
||||||
.fail:
|
.fail:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret 4
|
ret 4
|
||||||
@ -422,6 +421,7 @@ ret
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
probe:
|
probe:
|
||||||
|
DEBUGF 1, "Probe\n"
|
||||||
|
|
||||||
movzx eax, [device.pci_bus]
|
movzx eax, [device.pci_bus]
|
||||||
movzx edx, [device.pci_dev]
|
movzx edx, [device.pci_dev]
|
||||||
@ -452,9 +452,9 @@ probe:
|
|||||||
|
|
||||||
; Find Get Mac Function
|
; Find Get Mac Function
|
||||||
.ok:
|
.ok:
|
||||||
mov eax, [esi+4] ; Get pointer to "get MAC" function
|
mov eax, [esi + 4] ; Get pointer to "get MAC" function
|
||||||
mov [device.get_MAC], eax
|
mov [device.get_MAC], eax
|
||||||
mov eax, [esi+8] ; Get pointer to special initialization fn
|
mov eax, [esi + 8] ; Get pointer to special initialization fn
|
||||||
mov [device.special_func], eax
|
mov [device.special_func], eax
|
||||||
|
|
||||||
; Get MAC
|
; Get MAC
|
||||||
@ -462,7 +462,7 @@ probe:
|
|||||||
|
|
||||||
; Call special initialization fn if requested
|
; Call special initialization fn if requested
|
||||||
|
|
||||||
cmp [device.special_func],0
|
cmp [device.special_func], 0
|
||||||
je @f
|
je @f
|
||||||
call [device.special_func]
|
call [device.special_func]
|
||||||
@@:
|
@@:
|
||||||
@ -490,14 +490,16 @@ probe:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
init:
|
init:
|
||||||
|
DEBUGF 1, "Init\n"
|
||||||
|
|
||||||
call reset
|
call reset
|
||||||
call init_rxfilter
|
jnz .ret
|
||||||
call init_txd
|
call init_rxfilter
|
||||||
call init_rxd
|
call init_txd
|
||||||
call set_rx_mode
|
call init_rxd
|
||||||
call set_tx_mode
|
call set_rx_mode
|
||||||
;call check_mode
|
call set_tx_mode
|
||||||
|
;call check_mode
|
||||||
|
|
||||||
; enable interrupts on packet receive
|
; enable interrupts on packet receive
|
||||||
|
|
||||||
@ -515,6 +517,7 @@ init:
|
|||||||
|
|
||||||
mov [device.mtu], 1514
|
mov [device.mtu], 1514
|
||||||
|
|
||||||
|
.ret:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
@ -526,6 +529,8 @@ init:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
reset:
|
reset:
|
||||||
|
DEBUGF 1, "reset\n"
|
||||||
|
|
||||||
movzx eax, [device.irq_line]
|
movzx eax, [device.irq_line]
|
||||||
stdcall AttachIntHandler, eax, int_handler, 0
|
stdcall AttachIntHandler, eax, int_handler, 0
|
||||||
|
|
||||||
@ -560,8 +565,8 @@ reset:
|
|||||||
dec ecx
|
dec ecx
|
||||||
jz .error
|
jz .error
|
||||||
in eax, dx ; move interrup status to eax
|
in eax, dx ; move interrup status to eax
|
||||||
cmp eax, 0x03000000
|
test eax, 0x03000000 ; CHECKME
|
||||||
jne .loop
|
jz .loop
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
; Set Configuration Register depending on Card Revision
|
; Set Configuration Register depending on Card Revision
|
||||||
@ -598,6 +603,7 @@ reset:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
init_rxfilter:
|
init_rxfilter:
|
||||||
|
DEBUGF 1, "Init RxFilter\n"
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
; Get Receive Filter Control Register
|
; Get Receive Filter Control Register
|
||||||
@ -649,22 +655,23 @@ RXINT_Mac_Write: ; high word of eax tells card which mac byte to write
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
init_txd:
|
init_txd:
|
||||||
|
DEBUGF 1, "Init TxD\n"
|
||||||
|
|
||||||
;-------------------------
|
;-------------------------
|
||||||
; initialize TX descriptor
|
; initialize TX descriptor
|
||||||
|
|
||||||
mov dword [device.txd], 0 ; put link to next descriptor in link field
|
mov dword [device.txd], 0 ; put link to next descriptor in link field
|
||||||
mov dword [device.txd+4], 0 ; clear status field
|
mov dword [device.txd + 4], 0 ; clear status field
|
||||||
mov dword [device.txd+8], 0 ; ptr to buffer
|
mov dword [device.txd + 8], 0 ; ptr to buffer
|
||||||
|
|
||||||
;----------------------------------
|
;----------------------------------
|
||||||
; load Transmit Descriptor Register
|
; load Transmit Descriptor Register
|
||||||
|
|
||||||
set_io 0
|
set_io 0
|
||||||
set_io txdp ; TX Descriptor Pointer
|
set_io txdp ; TX Descriptor Pointer
|
||||||
lea eax, [device.txd]
|
lea eax, [device.txd]
|
||||||
GetRealAddr
|
GetRealAddr
|
||||||
out dx, eax ; move the pointer
|
out dx, eax ; move the pointer
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -677,29 +684,33 @@ init_txd:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
init_rxd:
|
init_rxd:
|
||||||
|
DEBUGF 1, "Init RxD\n"
|
||||||
|
|
||||||
; init RX descriptors
|
; init RX descriptors
|
||||||
mov ecx, NUM_RX_DESC
|
mov ecx, NUM_RX_DESC
|
||||||
lea esi, [device.rxd]
|
lea esi, [device.rxd]
|
||||||
|
|
||||||
.loop:
|
.loop:
|
||||||
lea eax, [esi + 16]
|
lea eax, [esi + 16] ; next ptr
|
||||||
GetRealAddr
|
GetRealAddr
|
||||||
mov dword [esi+0], eax
|
mov dword [esi], eax
|
||||||
mov dword [esi+4], RX_BUFF_SZ
|
mov dword [esi + 4], RX_BUFF_SZ ; size
|
||||||
|
|
||||||
|
push ecx
|
||||||
stdcall KernelAlloc, RX_BUFF_SZ
|
stdcall KernelAlloc, RX_BUFF_SZ
|
||||||
|
pop ecx
|
||||||
test eax, eax
|
test eax, eax
|
||||||
jz .fail
|
jz .fail
|
||||||
mov dword [esi+12], eax
|
mov dword [esi + 12], eax ; address
|
||||||
GetRealAddr
|
GetRealAddr
|
||||||
mov dword [esi+8], eax
|
mov dword [esi + 8], eax ; real address
|
||||||
add esi, 16
|
add esi, 16
|
||||||
loop .loop
|
dec ecx
|
||||||
|
jnz .loop
|
||||||
|
|
||||||
lea eax, [device.rxd]
|
lea eax, [device.rxd]
|
||||||
GetRealAddr
|
GetRealAddr
|
||||||
mov dword [esi - 16], eax ; correct last descriptor link ptr
|
mov dword [esi - 16], eax ; correct last descriptor link ptr
|
||||||
|
|
||||||
; And output ptr to first desc, to device
|
; And output ptr to first desc, to device
|
||||||
|
|
||||||
@ -734,6 +745,7 @@ init_rxd:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
set_tx_mode:
|
set_tx_mode:
|
||||||
|
DEBUGF 1, "set TX mode\n"
|
||||||
|
|
||||||
set_io 0
|
set_io 0
|
||||||
set_io cr
|
set_io cr
|
||||||
@ -776,6 +788,7 @@ set_tx_mode:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
set_rx_mode:
|
set_rx_mode:
|
||||||
|
DEBUGF 1, "set RX mode\n"
|
||||||
|
|
||||||
;----------------------------------------------
|
;----------------------------------------------
|
||||||
; update Multicast Hash Table in Receive Filter
|
; update Multicast Hash Table in Receive Filter
|
||||||
@ -824,7 +837,7 @@ set_rx_mode:
|
|||||||
; (Req for full-duplex and PMD Loopback)
|
; (Req for full-duplex and PMD Loopback)
|
||||||
; Max DMA Burst
|
; Max DMA Burst
|
||||||
; RX Drain Threshold, 8X8 bytes or 64bytes
|
; RX Drain Threshold, 8X8 bytes or 64bytes
|
||||||
out dx, eax
|
out dx, eax
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -846,6 +859,7 @@ set_rx_mode:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
SIS960_get_mac_addr:
|
SIS960_get_mac_addr:
|
||||||
|
DEBUGF 1, "SIS960 - get mac: "
|
||||||
|
|
||||||
;-------------------------------
|
;-------------------------------
|
||||||
; Send Request for eeprom access
|
; Send Request for eeprom access
|
||||||
@ -919,6 +933,7 @@ SIS960_get_mac_addr:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
SIS900_get_mac_addr:
|
SIS900_get_mac_addr:
|
||||||
|
DEBUGF 1, "SIS900 - get mac: "
|
||||||
|
|
||||||
;------------------------------------
|
;------------------------------------
|
||||||
; check to see if we have sane EEPROM
|
; check to see if we have sane EEPROM
|
||||||
@ -967,6 +982,8 @@ SIS900_get_mac_addr:
|
|||||||
align 4
|
align 4
|
||||||
Get_Mac_SIS635_900_REV:
|
Get_Mac_SIS635_900_REV:
|
||||||
|
|
||||||
|
DEBUGF 1, "SIS635 - get mac: "
|
||||||
|
|
||||||
set_io 0
|
set_io 0
|
||||||
set_io rfcr
|
set_io rfcr
|
||||||
in eax, dx
|
in eax, dx
|
||||||
@ -1012,6 +1029,8 @@ Get_Mac_SIS635_900_REV:
|
|||||||
; or eax, RFEN
|
; or eax, RFEN
|
||||||
; out dx, eax
|
; out dx, eax
|
||||||
|
|
||||||
|
DEBUGF 2,"%x-%x-%x-%x-%x-%x\n",[device.mac]:2,[device.mac+1]:2,[device.mac+2]:2,[device.mac+3]:2,[device.mac+4]:2,[device.mac+5]:2
|
||||||
|
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -1122,6 +1141,8 @@ write_mac:
|
|||||||
;***************************************************************************
|
;***************************************************************************
|
||||||
align 4
|
align 4
|
||||||
int_handler:
|
int_handler:
|
||||||
|
DEBUGF 1, "Int!\n"
|
||||||
|
|
||||||
; find pointer of device which made IRQ occur
|
; find pointer of device which made IRQ occur
|
||||||
mov esi, device_list
|
mov esi, device_list
|
||||||
mov ecx, [devices]
|
mov ecx, [devices]
|
||||||
@ -1276,7 +1297,7 @@ transmit:
|
|||||||
; update stats
|
; update stats
|
||||||
inc [device.packets_tx]
|
inc [device.packets_tx]
|
||||||
add dword [device.bytes_tx], ecx
|
add dword [device.bytes_tx], ecx
|
||||||
adc dword [device.bytes_tx+4], 0
|
adc dword [device.bytes_tx + 4], 0
|
||||||
|
|
||||||
.finish:
|
.finish:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -1295,14 +1316,14 @@ align 4 ; Place all initialised data her
|
|||||||
devices dd 0
|
devices dd 0
|
||||||
|
|
||||||
specific_table:
|
specific_table:
|
||||||
; dd SIS630A_900_REV,Get_Mac_SIS630A_900_REV,0
|
; dd SIS630A_900_REV, Get_Mac_SIS630A_900_REV, 0
|
||||||
; dd SIS630E_900_REV,Get_Mac_SIS630E_900_REV,0
|
; dd SIS630E_900_REV, Get_Mac_SIS630E_900_REV, 0
|
||||||
dd SIS630S_900_REV,Get_Mac_SIS635_900_REV,0
|
dd SIS630S_900_REV, Get_Mac_SIS635_900_REV, 0
|
||||||
dd SIS630EA1_900_REV,Get_Mac_SIS635_900_REV,0
|
dd SIS630EA1_900_REV, Get_Mac_SIS635_900_REV, 0
|
||||||
dd SIS630ET_900_REV,Get_Mac_SIS635_900_REV,0;SIS630ET_900_REV_SpecialFN
|
dd SIS630ET_900_REV, Get_Mac_SIS635_900_REV, 0 ;SIS630ET_900_REV_SpecialFN
|
||||||
dd SIS635A_900_REV,Get_Mac_SIS635_900_REV,0
|
dd SIS635A_900_REV, Get_Mac_SIS635_900_REV, 0
|
||||||
dd SIS900_960_REV,SIS960_get_mac_addr,0
|
dd SIS900_960_REV, SIS960_get_mac_addr, 0
|
||||||
dd SIS900B_900_REV,SIS900_get_mac_addr,0
|
dd SIS900B_900_REV, SIS900_get_mac_addr, 0
|
||||||
dd 0 ; end of list
|
dd 0 ; end of list
|
||||||
|
|
||||||
version dd (DRIVER_VERSION shl 16) or (API_VERSION and 0xFFFF)
|
version dd (DRIVER_VERSION shl 16) or (API_VERSION and 0xFFFF)
|
||||||
|
Loading…
Reference in New Issue
Block a user