/kernel/branches/net/applications/netstat/netstat.asm |
---|
76,6 → 76,9 |
add ebx, 18 |
mov edx, str_MAC |
mcall |
add ebx, 18 |
mov edx, str_link |
mcall |
mov ebx, API_ETH + 4 |
mov bh, [device] |
201,14 → 204,21 |
inc bl |
cmp bl, 3 |
jbe @r |
inc bl |
mcall 76 |
push eax |
mov ebx, 0x000a0000 |
pop ecx |
mov edx, 135 shl 16 + 75 + 3*18 |
mov edx, 135 shl 16 + 75 + 5*18 |
mov esi, 0x40000000 |
mov edi, 0x00bcbcbc |
mcall 47 |
sub edx, 18*2 |
pop ecx |
mcall |
sub edx, 18 |
pop ecx |
mcall |
591,6 → 601,7 |
str_unknown db 'unknown', 0 |
str_missed db 'Packets missed:',0 |
str_dumped db 'Packets dumped:',0 |
str_link db 'Link state:',0 |
namebuf rb 64 |
/kernel/branches/net/drivers/3c59x.asm |
---|
480,8 → 480,6 |
mov [device.reset], reset |
mov [device.transmit], null_op |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], write_mac |
mov [device.unload], null_op |
mov [device.name], my_service |
829,7 → 827,7 |
; print link type |
xor eax, eax |
bsr ax, word [device.mode] |
bsr ax, word [device.state] |
jz @f |
sub ax, 4 |
@@: |
1108,7 → 1106,7 |
.finish: |
test al, al |
jz @f |
or byte [device.mode+1], 100b |
or byte [device.state+1], 100b |
@@: |
ret |
1219,7 → 1217,7 |
and eax, 1111100000b |
push eax |
mov word[device.mode+2], ax |
mov word[device.state+2], ax |
; switch to register window 3 |
set_io 0 |
1508,7 → 1506,7 |
mov cl, al |
inc cl |
shl cl, 3 |
or byte [device.mode+1], cl |
or byte [device.state+1], cl |
test al, al ; aui or coax? |
jz .complete_loopback |
1540,7 → 1538,7 |
test al, al |
jnz @f |
and byte [device.mode+1], not 11000b |
and byte [device.state+1], not 11000b |
@@: |
ret |
1713,7 → 1711,7 |
DEBUGF 1,"base TX is available\n" |
or eax, (100b shl 20) |
if defined FORCE_FD |
mov word [device.mode], (1 shl 8) |
mov word [device.state], (1 shl 8) |
else |
mov word [device.mode], (1 shl 7) |
end if |
1725,7 → 1723,7 |
DEBUGF 1,"base FX is available\n" |
or eax, (101b shl 20) |
mov word [device.mode], (1 shl 10) |
mov word [device.state], (1 shl 10) |
jmp .set_media |
@@: |
1734,7 → 1732,7 |
DEBUGF 1,"mii-device is available\n" |
or eax, (0110b shl 20) |
mov word [device.mode], (1 shl 13) |
mov word [device.state], (1 shl 13) |
jmp .set_media |
@@: |
1744,9 → 1742,9 |
DEBUGF 1,"10base-T is available\n" |
.set_default: |
if FORCE_FD |
mov word [device.mode], (1 shl 6) |
mov word [device.state], (1 shl 6) |
else |
mov word [device.mode], (1 shl 5) |
mov word [device.state], (1 shl 5) |
end if |
jmp .set_media |
@@: |
1762,7 → 1760,7 |
pop eax |
or eax, (11b shl 20) |
mov word [device.mode], (1 shl 12) |
mov word [device.state], (1 shl 12) |
jmp .set_media |
@@: |
1771,7 → 1769,7 |
DEBUGF 1,"AUI is available\n" |
or eax, (1 shl 20) |
mov word [device.mode], (1 shl 11) |
mov word [device.state], (1 shl 11) |
.set_media: |
set_io 0 |
/kernel/branches/net/drivers/R6040.asm |
---|
305,8 → 305,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], .fail |
mov [device.unload], unload |
mov [device.name], my_service |
620,9 → 618,11 |
; Set the mtu, kernel will be able to send now |
mov [device.mtu], 1514 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
DEBUGF 1,"Reset ok\n" |
xor eax, eax |
ret |
/kernel/branches/net/drivers/RTL8029.asm |
---|
350,8 → 350,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], write_mac |
mov [device.unload], unload |
mov [device.name], my_service |
653,6 → 651,9 |
; Set the mtu, kernel will be able to send now |
mov [device.mtu], ETH_FRAME_LEN |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
; Indicate that we have successfully reset the card |
xor eax, eax |
DEBUGF 2,"Done!\n" |
/kernel/branches/net/drivers/RTL8139.asm |
---|
32,7 → 32,6 |
include 'proc32.inc' |
include 'imports.inc' |
include 'fdo.inc' |
include '../struct.inc' |
include 'netdrv.inc' |
public START |
59,7 → 58,7 |
REG_HLTCLK = 0x5b ; undocumented halt clock register |
REG_BMCR = 0x62 ; basic mode control register |
REG_ANAR = 0x66 ; auto negotiation advertisement register |
REG_9346CR_WE = 11b SHL 6 |
REG_9346CR_WE = 11b shl 6 |
BIT_RUNT = 4 ; total packet length < 64 bytes |
BIT_LONG = 3 ; total packet length > 4k |
166,16 → 165,16 |
IDX_RTL8139D = 6 |
IDX_RTL8101 = 7 |
ISR_SERR = 1 SHL 15 |
ISR_TIMEOUT = 1 SHL 14 |
ISR_LENCHG = 1 SHL 13 |
ISR_FIFOOVW = 1 SHL 6 |
ISR_PUN = 1 SHL 5 |
ISR_RXOVW = 1 SHL 4 |
ISR_TER = 1 SHL 3 |
ISR_TOK = 1 SHL 2 |
ISR_RER = 1 SHL 1 |
ISR_ROK = 1 SHL 0 |
ISR_SERR = 1 shl 15 |
ISR_TIMEOUT = 1 shl 14 |
ISR_LENCHG = 1 shl 13 |
ISR_FIFOOVW = 1 shl 6 |
ISR_PUN = 1 shl 5 |
ISR_RXOVW = 1 shl 4 |
ISR_TER = 1 shl 3 |
ISR_TOK = 1 shl 2 |
ISR_RER = 1 shl 1 |
ISR_ROK = 1 shl 0 |
INTERRUPT_MASK = ISR_ROK or \ |
ISR_RXOVW or \ |
185,14 → 184,14 |
ISR_TOK or \ |
ISR_TER |
TSR_OWN = 1 SHL 13 |
TSR_TUN = 1 SHL 14 |
TSR_TOK = 1 SHL 15 |
TSR_OWN = 1 shl 13 |
TSR_TUN = 1 shl 14 |
TSR_TOK = 1 shl 15 |
TSR_CDH = 1 SHL 28 |
TSR_OWC = 1 SHL 29 |
TSR_TABT = 1 SHL 30 |
TSR_CRS = 1 SHL 31 |
TSR_CDH = 1 shl 28 |
TSR_OWC = 1 shl 29 |
TSR_TABT = 1 shl 30 |
TSR_CRS = 1 shl 31 |
virtual at ebx |
202,7 → 201,6 |
ETH_DEVICE |
.rx_buffer dd ? |
.tx_buffer dd ? |
.rx_data_offset dd ? |
.io_addr dd ? |
318,8 → 316,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], write_mac |
mov [device.unload], unload |
mov [device.name], my_service |
339,7 → 335,7 |
PCI_find_irq |
DEBUGF 2, "Hooking into device, dev:%x, bus:%x, irq:%x, addr:%x\n",\ |
DEBUGF 2, "Hooking into device, dev:%x, bus:%x, irq:%x, I/O addr:%x\n",\ |
[device.pci_dev]:1,[device.pci_bus]:1,[device.irq_line]:1,[device.io_addr]:4 |
; Allocate the receive buffer |
428,7 → 424,6 |
PCI_make_bus_master |
; get chip version |
set_io 0 |
set_io REG_TXCONFIG + 2 |
in ax, dx |
436,6 → 431,7 |
shr ax, 6 |
and al, 01111111b |
; now find it in our array |
mov ecx, HW_VER_ARRAY_SIZE-1 |
.chip_ver_loop: |
cmp al, [hw_ver_array + ecx] |
456,7 → 452,6 |
DEBUGF 2, "Chip version: %s\n", ecx |
; wake up the chip |
set_io 0 |
set_io REG_HLTCLK |
mov al, 'R' ; run the clock |
463,23 → 458,25 |
out dx, al |
; unlock config and BMCR registers |
set_io REG_9346CR |
mov al, (1 shl BIT_93C46_EEM1) or (1 shl BIT_93C46_EEM0) |
out dx, al |
; enable power management |
set_io REG_CONFIG1 |
in al, dx |
cmp [device.hw_ver_id], IDX_RTL8139B |
jb .old_chip |
jae .new_chip |
; wake up older chips |
and al, not ((1 shl BIT_SLEEP) or (1 shl BIT_PWRDWN)) |
out dx, al |
jmp .finish_wake_up |
; set LWAKE pin to active high (default value). |
; it is for Wake-On-LAN functionality of some motherboards. |
; this signal is used to inform the motherboard to execute a wake-up process. |
; only at newer chips. |
.new_chip: |
or al, (1 shl BIT_PMEn) |
and al, not (1 shl BIT_LWACT) |
out dx, al |
489,17 → 486,8 |
and al, not (1 shl BIT_LWPTN) |
out dx, al |
jmp .finish_wake_up |
.old_chip: |
; wake up older chips |
and al, not ((1 shl BIT_SLEEP) or (1 shl BIT_PWRDWN)) |
out dx, al |
; lock config and BMCR registers |
.finish_wake_up: |
; lock config and BMCR registers |
xor al, al |
set_io 0 |
set_io REG_9346CR |
514,12 → 502,11 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
reset: |
DEBUGF 2, "Resetting\n" |
DEBUGF 2, "Reset\n" |
; attach int handler |
movzx eax, [device.irq_line] |
DEBUGF 1, "Attaching int handler to irq %x, ", eax:1 |
DEBUGF 1, "Attaching int handler to irq %x\n", eax:1 |
stdcall AttachIntHandler, eax, int_handler, dword 0 |
test eax, eax |
jnz @f |
529,7 → 516,6 |
@@: |
; reset chip |
DEBUGF 1, "Resetting chip\n" |
set_io 0 |
set_io REG_COMMAND |
542,16 → 528,15 |
jz .reset_completed ; RST remains 1 during reset |
dec cx |
jns .wait_for_reset |
DEBUGF 1, "Reset timeout!\n" |
.reset_completed: |
; unlock config and BMCR registers |
set_io REG_9346CR |
mov al, (1 shl BIT_93C46_EEM1) or (1 shl BIT_93C46_EEM0) |
out dx, al |
; initialize multicast registers (no filtering) |
mov eax, 0xffffffff |
set_io REG_MAR0 |
out dx, eax |
558,28 → 543,18 |
set_io REG_MAR4 |
out dx, eax |
; enable Rx/Tx |
mov al, (1 shl BIT_RE) or (1 shl BIT_TE) |
set_io REG_COMMAND |
out dx, al |
; Rxbuffer size, unlimited dma burst, no wrapping, no rx threshold |
; accept broadcast packets, accept physical match packets |
mov ax, RX_CONFIG |
set_io REG_RXCONFIG |
out dx, ax |
; 1024 bytes DMA burst, total retries = 16 + 8 * 16 = 144 |
mov eax, (TX_MXDMA shl BIT_TX_MXDMA) or (TXRR shl BIT_TXRR) or BIT_IFG1 or BIT_IFG0 |
set_io REG_TXCONFIG |
out dx, eax |
; enable auto negotiation |
set_io REG_BMCR |
in ax, dx |
or ax, (1 shl BIT_ANE) |
586,7 → 561,6 |
out dx, ax |
; set auto negotiation advertisement |
set_io REG_ANAR |
in ax, dx |
or ax, (1 shl BIT_SELECTOR) or (1 shl BIT_10) or (1 shl BIT_10FD) or (1 shl BIT_TX) or (1 shl BIT_TXFD) |
593,59 → 567,55 |
out dx, ax |
; lock config and BMCR registers |
xor eax, eax |
set_io REG_9346CR |
out dx, al |
; init RX/TX pointers |
mov [device.rx_data_offset], eax |
mov [device.curr_tx_desc], al |
; set_io REG_CAPR |
; out dx, ax |
; clear packet/byte counters |
lea edi, [device.bytes_tx] |
mov ecx, 6 |
rep stosd |
; clear missing packet counter |
set_io REG_MPC |
out dx, eax |
; set RxBuffer address, init RX buffer offset |
mov eax, [device.rx_buffer] |
mov dword[eax], 0 |
DEBUGF 2, "RX buffer: %x\n", eax |
mov dword[eax], 0 ; clear receive flags for first packet (really needed??) |
DEBUGF 2, "RX buffer virtual addr=0x%x\n", eax |
GetRealAddr |
DEBUGF 2, "RX buffer: %x\n", eax |
DEBUGF 2, "RX buffer real addr=0x%x\n", eax |
set_io REG_RBSTART |
out dx, eax |
; Read MAC address |
call read_mac |
; enable Rx/Tx |
set_io 0 |
mov al, (1 shl BIT_RE) or (1 shl BIT_TE) |
set_io REG_COMMAND |
out dx, al |
; enable interrupts |
set_io 0 |
set_io REG_IMR |
mov eax, INTERRUPT_MASK |
mov ax, INTERRUPT_MASK |
out dx , ax |
; Set the mtu, kernel will be able to send now |
mov [device.mtu], 1514 |
call cable |
; Indicate that we have successfully reset the card |
DEBUGF 2, "Done!\n" |
xor eax, eax |
ret |
750,7 → 720,6 |
DEBUGF 1, "\n%s int\n", my_service |
; find pointer of device wich made IRQ occur |
mov ecx, [devices] |
test ecx, ecx |
jz .nothing |
760,7 → 729,7 |
set_io 0 |
set_io REG_ISR |
in ax, dx |
in ax, dx ; Get interrupt status |
out dx, ax ; send it back to ACK |
test ax, ax |
jnz .got_it |
787,7 → 756,7 |
set_io REG_COMMAND |
in al , dx |
test al , BUFE ; test if RX buffer is empty |
jnz .finish ; |
jnz .finish |
DEBUGF 1, "RX: " |
798,13 → 767,12 |
; packet is ok, copy it |
movzx ecx, word [eax+2] ; packet length |
sub cx, 4 ; don't copy CRC |
sub ecx, 4 ; don't copy CRC |
; Update stats |
add dword [device.bytes_rx], ecx |
adc dword [device.bytes_rx + 4], 0 |
inc dword [device.packets_rx] |
inc [device.packets_rx] |
DEBUGF 1, "Received %u bytes\n", ecx |
874,10 → 842,8 |
DEBUGF 1, "Reset RX\n" |
in al, dx ; read command register |
push ax |
and al, not (1 shl BIT_RE) ; Clear the RE bit |
out dx, al |
pop ax |
out dx, al ; write original command back |
985,7 → 951,6 |
test ax, ISR_LENCHG |
jz .fail |
DEBUGF 2, "Cable changed!\n" |
call cable |
.fail: |
1003,27 → 968,38 |
align 4 |
cable: |
DEBUGF 1, "Checking Cable status: " |
DEBUGF 1, "Updating Cable status\n" |
mov edx, dword [device.io_addr] |
add edx, REG_MSR |
set_io 0 |
set_io REG_MSR |
in al , dx |
; test al , 1 SHL 2 ; 0 = link ok 1 = link fail |
; jnz .notconnected |
test al, 1 shl 2 ; 0 = link ok 1 = link fail |
jnz .notconnected |
; test al , 1 SHL 3 ; 0 = 100 Mbps 1 = 10 Mbps |
; jnz .10mbps |
test al, 1 shl 3 ; 0 = 100 Mbps 1 = 10 Mbps |
jnz .10mbps |
shr al, 2 |
and al, 3 |
.100mbps: |
mov [device.state], ETH_LINK_100M |
call NetLinkChanged |
mov byte [device.mode+3], al |
DEBUGF 1, "Done!\n" |
ret |
.10mbps: |
mov [device.state], ETH_LINK_10M |
call NetLinkChanged |
ret |
.notconnected: |
mov [device.state], ETH_LINK_DOWN |
call NetLinkChanged |
ret |
;;;;;;;;;;;;;;;;;;;;;;; |
;; ;; |
;; Write MAC address ;; |
1036,7 → 1012,6 |
DEBUGF 2, "Writing MAC: " |
; disable all in command registers |
set_io 0 |
set_io REG_9346CR |
xor eax, eax |
1051,13 → 1026,11 |
out dx, ax |
; enable writing |
set_io REG_9346CR |
mov eax, REG_9346CR_WE |
out dx, al |
; write the mac ... |
set_io REG_IDR0 |
pop eax |
out dx, eax |
1068,7 → 1041,6 |
out dx, eax |
; disable writing |
set_io REG_9346CR |
xor eax, eax |
out dx, al |
/kernel/branches/net/drivers/RTL8169.asm |
---|
462,8 → 462,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], write_mac |
mov [device.unload], unload |
mov [device.name], my_service |
725,6 → 723,9 |
mov [device.mtu], 1500 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
xor eax, eax |
ret |
/kernel/branches/net/drivers/bcm57xx.asm |
---|
161,8 → 161,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], .fail |
mov [device.unload], unload |
mov [device.name], my_service |
294,7 → 292,12 |
call read_mac |
; Set the mtu, kernel will be able to send now |
mov [device.mtu], 1514 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
ret |
/kernel/branches/net/drivers/dec21x4x.asm |
---|
409,8 → 409,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], write_mac |
mov [device.unload], unload |
mov [device.name], my_service |
695,6 → 693,9 |
; Set the mtu, kernel will be able to send now |
mov [device.mtu], 1514 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
DEBUGF 1,"Reset done\n" |
ret |
/kernel/branches/net/drivers/forcedeth.asm |
---|
535,8 → 535,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], .fail |
mov [device.unload], .fail |
mov [device.name], my_service |
986,6 → 984,9 |
xor eax, eax ; Indicate that we have successfully reset the card |
mov [device.mtu], 1514 ;;; FIXME |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
ret |
/kernel/branches/net/drivers/i8254x.asm |
---|
374,8 → 374,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], .fail |
mov [device.unload], unload |
mov [device.name], my_service |
585,6 → 583,9 |
mov [device.mtu], 1514 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
xor eax, eax |
ret |
/kernel/branches/net/drivers/i8255x.asm |
---|
273,8 → 273,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], MAC_write |
mov [device.unload], unload |
mov [device.name], my_service |
561,8 → 559,11 |
DEBUGF 1,"Resetting %s complete\n", my_service |
mov [device.mtu], 1514 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
xor eax, eax ; indicate that we have successfully reset the card |
ret |
669,6 → 670,8 |
add dword [device.bytes_tx], eax |
adc dword [device.bytes_tx + 4], 0 |
DEBUGF 1,"Transmit OK\n" |
xor eax, eax |
ret 8 |
781,13 → 784,49 |
.no_rx: |
; Cleanup after TX |
cmp [txfd.status], 0 |
je .done |
cmp [last_tx_buffer], 0 |
je .done |
push ax |
DEBUGF 1, "Removing packet 0x%x from RAM!\n", [last_tx_buffer] |
stdcall KernelFree, [last_tx_buffer] |
mov [last_tx_buffer], 0 |
pop ax |
.done: |
and ax, 00111100b |
cmp ax, 00001000b |
jne .fail |
DEBUGF 1, "out of resources!\n" |
; Restart the RX |
; allocate new descriptor |
stdcall KernelAlloc, 2000 |
mov [device.rx_desc], eax |
mov esi, eax |
GetRealAddr |
mov [esi + rxfd.status], 0x0000 |
mov [esi + rxfd.command], 0xc000 ; End of list + Suspend |
mov [esi + rxfd.link], eax |
mov [esi + rxfd.count], 0 |
mov [esi + rxfd.size], 1528 |
; restart RX |
set_io 0 |
set_io reg_scb_ptr |
; lea eax, [device.rx_desc] |
; GetRealAddr |
out dx, eax |
set_io reg_scb_cmd |
mov ax, RX_START |
out dx, ax |
call cmd_wait |
.fail: |
ret |
/kernel/branches/net/drivers/imports.inc |
---|
97,5 → 97,6 |
NetRegDev,\ |
NetUnRegDev,\ |
NetPtrToNum,\ |
NetLinkChanged,\ |
Eth_input,\ |
IPv4_input |
/kernel/branches/net/drivers/mtd80x.asm |
---|
406,8 → 406,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], write_mac |
mov [device.unload], unload |
mov [device.name], my_service |
714,8 → 712,11 |
rep stosd |
mov [device.mtu], 1514 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
xor eax, eax |
ret |
/kernel/branches/net/drivers/netdrv.inc |
---|
22,7 → 22,16 |
NET_TYPE_ETH = 1 |
NET_TYPE_SLIP = 2 |
; link state |
ETH_LINK_DOWN = 0 ; Link is down |
ETH_LINK_UNKOWN = 1b ; There could be an active link |
ETH_LINK_FD = 10b ; full duplex flag |
ETH_LINK_10M = 100b ; 10 mbit |
ETH_LINK_100M = 1000b ; 100 mbit |
ETH_LINK_1G = 10000b ; gigabit |
LAST_IO = 0 |
macro set_io addr { |
117,6 → 126,9 |
.packets_tx dd ? ; |
.packets_rx dd ? ; |
.state dd ? ; link state (0 = no link) |
.hwacc dd ? ; bitmask stating enabled HW accelerations |
.end: |
} |
124,15 → 136,8 |
macro ETH_DEVICE { |
NET_DEVICE |
.set_mode dd ? |
.get_mode dd ? |
.set_MAC dd ? |
.get_MAC dd ? |
.mode dd ? |
.mac dp ? |
dp ? ; qword alignment |
dw ? ; qword alignment |
} |
141,9 → 146,4 |
macro SLIP_DEVICE { |
NET_DEVICE |
.set_mode dd ? |
.get_mode dd ? |
.mode dd ? |
} |
/kernel/branches/net/drivers/pcnet32.asm |
---|
446,8 → 446,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], write_mac |
mov [device.unload], unload |
mov [device.name], my_service |
874,6 → 872,9 |
; Set the mtu, kernel will be able to send now |
mov [device.mtu], 1514 |
; get link status |
call cable |
DEBUGF 1,"reset complete\n" |
xor eax, eax |
ret |
/kernel/branches/net/drivers/rhine.asm |
---|
634,8 → 634,6 |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.get_MAC], read_mac |
mov [device.set_MAC], .fail |
mov [device.unload], unload |
mov [device.name], my_service |
1006,9 → 1004,11 |
; Set the mtu, kernel will be able to send now |
mov [device.mtu], 1514 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
; say reset was successfull |
xor eax, eax |
ret |
/kernel/branches/net/drivers/sis900.asm |
---|
328,10 → 328,8 |
movzx ecx, byte[eax+2] |
mov [device.pci_dev], ecx |
; 4j. Fill in the direct call addresses into the struct. |
; Note that get_MAC pointer is filled in initialization by probe. |
mov [device.reset], reset |
mov [device.transmit], transmit |
mov [device.set_MAC], write_mac |
mov [device.unload], unload |
mov [device.name], my_service |
439,10 → 437,8 |
jmp .tableloop |
.ok: |
mov eax, [esi + 4] ; Get pointer to "get MAC" function |
mov [device.get_MAC], eax |
call [device.get_MAC] |
call dword[esi + 4] ; "get MAC" function |
; Set table entries |
mov [device.table_entries], 16 |
662,8 → 658,11 |
out dx, eax |
mov [device.mtu], 1514 |
; Set link state to unknown |
mov [device.state], ETH_LINK_UNKOWN |
xor eax, eax |
ret |
.fail: |
/kernel/branches/net/network/ethernet.inc |
---|
28,13 → 28,6 |
struct ETH_DEVICE NET_DEVICE |
set_mode dd ? |
get_mode dd ? |
set_MAC dd ? |
get_MAC dd ? |
mode dd ? |
mac dp ? |
ends |
199,7 → 192,7 |
dd .bytes_tx ; 2 |
dd .bytes_rx ; 3 |
dd .read_mac ; 4 |
dd .write_mac ; 5 |
dd .state ; 5 |
.number = ($ - .table) / 4 - 1 |
.error: |
234,9 → 227,7 |
mov [esp+20+4], ebx ; TODO: fix this ugly code |
ret |
.write_mac: |
push ecx |
push dx |
call [eax + ETH_DEVICE.set_MAC] |
.state: |
mov eax, [eax + NET_DEVICE.state] |
ret |
/kernel/branches/net/network/stack.inc |
---|
148,7 → 148,8 |
packets_tx dd ? ; |
packets_rx dd ? ; |
; hwacc dd ? ; bitmask stating available hardware accelerations (offload engines) |
state dd ? ; link state (0 = no link) |
hwacc dd ? ; bitmask stating enabled HW accelerations (offload engines) |
ends |
290,9 → 291,13 |
align 4 |
NET_link_changed: |
DEBUGF 1,"NET_link_changed: %x\n", ebx |
align 4 |
NET_send_event: |
DEBUGF 1,"NET_send_event\n" |
; Send event to all applications |
push edi ecx |
mov edi, SLOT_BASE |