* Fixes for flat kernel in SIS900 network card driver, now it works
* Bugfix of revision 261: the author of some changes used 'stdcall' and 'proc' (created for stupid men), but (as a stupid man) didn't know that they rely on EBP keeping by all procedures, which is wrong for network card drivers git-svn-id: svn://kolibrios.org@735 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
86aea3e746
commit
061c201f0b
@ -452,7 +452,9 @@ arp_handler:
|
|||||||
mov bx, ETHER_ARP ;type of protocol
|
mov bx, ETHER_ARP ;type of protocol
|
||||||
mov ecx, 28 ;data size
|
mov ecx, 28 ;data size
|
||||||
mov esi, ETH_FRAME.Data + ARP_PACKET ;ptr to data
|
mov esi, ETH_FRAME.Data + ARP_PACKET ;ptr to data
|
||||||
|
push ebp
|
||||||
call dword [drvr_transmit] ;transmit packet
|
call dword [drvr_transmit] ;transmit packet
|
||||||
|
pop ebp
|
||||||
|
|
||||||
.exit:
|
.exit:
|
||||||
ret
|
ret
|
||||||
@ -510,7 +512,9 @@ proc arp_request stdcall uses ebx esi edi,\
|
|||||||
mov bx, ETHER_ARP ; Type of packet
|
mov bx, ETHER_ARP ; Type of packet
|
||||||
mov ecx, 28 ; size of packet
|
mov ecx, 28 ; size of packet
|
||||||
lea esi, [esp + ARP_PACKET]; pointer to packet data
|
lea esi, [esp + ARP_PACKET]; pointer to packet data
|
||||||
|
push ebp
|
||||||
call dword [drvr_transmit] ; Call the drivers transmit function
|
call dword [drvr_transmit] ; Call the drivers transmit function
|
||||||
|
pop ebp
|
||||||
|
|
||||||
add esp, 28 ; free memory, allocated before for ARP_PACKET
|
add esp, 28 ; free memory, allocated before for ARP_PACKET
|
||||||
|
|
||||||
|
@ -454,11 +454,11 @@ SIS900_init_txd:
|
|||||||
;********** initialize TX descriptor **************
|
;********** initialize TX descriptor **************
|
||||||
mov [txd], dword 0 ;put link to next descriptor in link field
|
mov [txd], dword 0 ;put link to next descriptor in link field
|
||||||
mov [txd+4],dword 0 ;clear status field
|
mov [txd+4],dword 0 ;clear status field
|
||||||
mov [txd+8], dword txb ;save address to buffer ptr field
|
mov [txd+8], dword txb - OS_BASE ;save address to buffer ptr field
|
||||||
;*************** load Transmit Descriptor Register ***************
|
;*************** load Transmit Descriptor Register ***************
|
||||||
mov dx, [io_addr] ; base address
|
mov dx, [io_addr] ; base address
|
||||||
add dx, SIS900_txdp ; TX Descriptor Pointer
|
add dx, SIS900_txdp ; TX Descriptor Pointer
|
||||||
mov eax, txd ; First Descriptor
|
mov eax, txd - OS_BASE ; First Descriptor
|
||||||
out dx, eax ; move the pointer
|
out dx, eax ; move the pointer
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -486,12 +486,12 @@ SIS900_init_rxd_Loop:
|
|||||||
xor ebx, ebx ;
|
xor ebx, ebx ;
|
||||||
SIS900_init_rxd_Loop_0: ;
|
SIS900_init_rxd_Loop_0: ;
|
||||||
imul ebx, 12 ;
|
imul ebx, 12 ;
|
||||||
add ebx, rxd ;
|
add ebx, rxd - OS_BASE ;
|
||||||
mov [rxd+eax], ebx ;save link to next descriptor
|
mov [rxd+eax], ebx ;save link to next descriptor
|
||||||
mov [rxd+eax+4],dword RX_BUFF_SZ ;status bits init to buf size
|
mov [rxd+eax+4],dword RX_BUFF_SZ ;status bits init to buf size
|
||||||
mov ebx, ecx ;find where the buf is located
|
mov ebx, ecx ;find where the buf is located
|
||||||
imul ebx,RX_BUFF_SZ ;
|
imul ebx,RX_BUFF_SZ ;
|
||||||
add ebx, rxb ;
|
add ebx, rxb - OS_BASE ;
|
||||||
mov [rxd+eax+8], ebx ;save buffer pointer
|
mov [rxd+eax+8], ebx ;save buffer pointer
|
||||||
inc ecx ;next descriptor
|
inc ecx ;next descriptor
|
||||||
cmp ecx, NUM_RX_DESC ;
|
cmp ecx, NUM_RX_DESC ;
|
||||||
@ -500,7 +500,7 @@ SIS900_init_rxd_Loop_0: ;
|
|||||||
; descriptor*********
|
; descriptor*********
|
||||||
mov dx, [io_addr]
|
mov dx, [io_addr]
|
||||||
add dx, SIS900_rxdp
|
add dx, SIS900_rxdp
|
||||||
mov eax, rxd
|
mov eax, rxd - OS_BASE
|
||||||
out dx, eax
|
out dx, eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -576,7 +576,7 @@ SIS900_set_rx_mode:
|
|||||||
SIS900_set_rx_mode_Loop:
|
SIS900_set_rx_mode_Loop:
|
||||||
mov eax, ecx
|
mov eax, ecx
|
||||||
shl eax, 1
|
shl eax, 1
|
||||||
mov [SIS900_mc_filter+eax], ebx
|
mov [SIS900_mc_filter+eax], bx
|
||||||
lea edx,[ebp+SIS900_rfcr] ; Receive Filter Control Reg offset
|
lea edx,[ebp+SIS900_rfcr] ; Receive Filter Control Reg offset
|
||||||
mov eax, 4 ;determine table entry
|
mov eax, 4 ;determine table entry
|
||||||
add al, cl
|
add al, cl
|
||||||
@ -931,6 +931,7 @@ SIS900_poll_IS_packet:
|
|||||||
; first copy dword-wise, divide size by 4
|
; first copy dword-wise, divide size by 4
|
||||||
shr ecx, 2
|
shr ecx, 2
|
||||||
mov esi, [rxd+eax+8] ; set source
|
mov esi, [rxd+eax+8] ; set source
|
||||||
|
add esi, OS_BASE ; get linear address
|
||||||
mov edi, Ether_buffer ; set destination
|
mov edi, Ether_buffer ; set destination
|
||||||
cld ; clear direction
|
cld ; clear direction
|
||||||
rep movsd ; copy the dwords
|
rep movsd ; copy the dwords
|
||||||
@ -986,6 +987,8 @@ if defined SIS900_DEBUG
|
|||||||
SIS900_Debug_Transmit_Packet db 'Transmitting Packet: ',13,10,0
|
SIS900_Debug_Transmit_Packet db 'Transmitting Packet: ',13,10,0
|
||||||
SIS900_Debug_Transmit_Packet_Err db 'Transmitting Packet Error: ',13,10,0
|
SIS900_Debug_Transmit_Packet_Err db 'Transmitting Packet Error: ',13,10,0
|
||||||
end if
|
end if
|
||||||
|
str1 db 'Transmitting packet:',13,10,0
|
||||||
|
str2 db ' ',0
|
||||||
SIS900_transmit:
|
SIS900_transmit:
|
||||||
mov ebp, [io_addr] ; Base Address
|
mov ebp, [io_addr] ; Base Address
|
||||||
;******** Stop the transmitter ********
|
;******** Stop the transmitter ********
|
||||||
@ -995,7 +998,7 @@ SIS900_transmit:
|
|||||||
out dx, eax
|
out dx, eax
|
||||||
;*******load Transmit Descriptor Register *******
|
;*******load Transmit Descriptor Register *******
|
||||||
lea edx,[ebp+SIS900_txdp]
|
lea edx,[ebp+SIS900_txdp]
|
||||||
mov eax, txd
|
mov eax, txd - OS_BASE
|
||||||
out dx, eax
|
out dx, eax
|
||||||
;******* copy packet to descriptor*******
|
;******* copy packet to descriptor*******
|
||||||
push esi
|
push esi
|
||||||
|
Loading…
Reference in New Issue
Block a user