Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 6010 → Rev 6011

/kernel/trunk/network/stack.inc
258,16 → 258,14
endg
 
 
;-----------------------------------------------------------------
;
; stack_init
;
; This function calls all network init procedures
;
; IN: /
; OUT: /
;
;-----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; stack_init: Initialize all network variables ;
; ;
; IN: / ;
; OUT: / ;
; ;
;-----------------------------------------------------------------;
align 4
stack_init:
 
294,21 → 292,21
mov ecx, (NET_DEVICES_MAX + 1)
rep stosd
 
ETH_init
eth_init
 
PPPoE_init
pppoe_init
 
IPv4_init
; IPv6_init
ICMP_init
ipv4_init
; ipv6_init
icmp_init
 
ARP_init
UDP_init
TCP_init
arp_init
udp_init
tcp_init
 
SOCKET_init
socket_init
 
LOOP_init
loop_init
 
mov [net_tmr_count], 0
ret
329,16 → 327,14
endp
 
 
;-----------------------------------------------------------------
;
; stack_handler
;
; This function is called in kernel loop
;
; IN: /
; OUT: /
;
;-----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; stack_handler: Network handlers called from os_loop. ;
; ;
; IN: / ;
; OUT: / ;
; ;
;-----------------------------------------------------------------;
align 4
stack_handler:
 
354,13 → 350,13
test [net_10ms], 0x0f ; 160ms
jnz .exit
 
TCP_timer_160ms
tcp_timer_160ms
 
test [net_10ms], 0x3f ; 640ms
jnz .exit
 
ARP_decrease_entry_ttls
IPv4_decrease_fragment_ttls
arp_decrease_entry_ttls
ipv4_decrease_fragment_ttls
 
xor edx, edx
mov eax, [TCP_timer1_event]
373,7 → 369,8
 
 
align 4
proc NET_BUFF_alloc stdcall, buffersize
proc net_buff_alloc stdcall, buffersize
 
cmp [buffersize], NET_BUFFER_SIZE
ja .too_large
 
387,7 → 384,7
 
spin_unlock_irqrestore
 
DEBUGF DEBUG_NETWORK_VERBOSE, "net alloc: 0x%x\n", eax
DEBUGF DEBUG_NETWORK_VERBOSE, "net_buff_alloc: 0x%x\n", eax
ret
 
.out_of_mem:
394,20 → 391,20
spin_unlock_irqrestore
 
xor eax, eax
DEBUGF DEBUG_NETWORK_ERROR, "NET_BUFF_alloc: out of mem!\n"
DEBUGF DEBUG_NETWORK_ERROR, "net_buff_alloc: out of mem!\n"
ret
 
.too_large:
xor eax, eax
DEBUGF DEBUG_NETWORK_ERROR, "NET_BUFF_alloc: too large!\n"
DEBUGF DEBUG_NETWORK_ERROR, "net_buff_alloc: too large!\n"
ret
endp
 
 
align 4
proc NET_BUFF_free stdcall, buffer
proc net_buff_free stdcall, buffer
 
DEBUGF DEBUG_NETWORK_VERBOSE, "net free: 0x%x\n", [buffer]
DEBUGF DEBUG_NETWORK_VERBOSE, "net_buff_free: 0x%x\n", [buffer]
 
spin_lock_irqsave
 
423,14 → 420,14
 
 
align 4
NET_link_changed:
net_link_changed:
 
DEBUGF DEBUG_NETWORK_VERBOSE, "NET_link_changed device=0x%x status=0x%x\n", ebx, [ebx + NET_DEVICE.link_state]
DEBUGF DEBUG_NETWORK_VERBOSE, "net_link_changed device=0x%x status=0x%x\n", ebx, [ebx + NET_DEVICE.link_state]
 
align 4
NET_send_event:
net_send_event:
 
DEBUGF DEBUG_NETWORK_VERBOSE, "NET_send_event\n"
DEBUGF DEBUG_NETWORK_VERBOSE, "net_send_event\n"
 
; Send event to all applications
push edi ecx
446,21 → 443,20
 
 
 
;-----------------------------------------------------------------
;
; NET_add_device:
;
; This function is called by the network drivers,
; to register each running NIC to the kernel
;
; IN: Pointer to device structure in ebx
; OUT: Device num in eax, -1 on error
;
;-----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; net_add_device: Called by network driver to register interface. ;
; ;
; IN: ebx = ptr to device structure ;
; ;
; OUT: eax = device num on success ;
; eax = -1 on error ;
; ;
;-----------------------------------------------------------------;
align 4
NET_add_device:
net_add_device:
 
DEBUGF DEBUG_NETWORK_VERBOSE, "NET_Add_Device: %x\n", ebx ;;; TODO: use mutex to lock net device list
DEBUGF DEBUG_NETWORK_VERBOSE, "net_add_device: %x\n", ebx ;;; TODO: use mutex to lock net device list
 
cmp [NET_RUNNING], NET_DEVICES_MAX
jae .error
495,7 → 491,7
 
inc [NET_RUNNING] ; Indicate that one more network device is up and running
 
call NET_send_event
call net_send_event
 
DEBUGF DEBUG_NETWORK_VERBOSE, "Device number: %u\n", eax
ret
507,19 → 503,17
 
 
 
;-----------------------------------------------------------------
;
; NET_Remove_Device:
;
; This function is called by network drivers,
; to unregister network devices from the kernel
;
; IN: Pointer to device structure in ebx
; OUT: eax: -1 on error
;
;-----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; net_remove_device: Called by network driver to unregister dev. ;
; ;
; IN: ebx = ptr to device ;
; ;
; OUT: eax: -1 on error ;
; ;
;-----------------------------------------------------------------;
align 4
NET_remove_device:
net_remove_device:
 
cmp [NET_RUNNING], 0
je .error
541,7 → 535,7
mov dword [edi-4], eax
dec [NET_RUNNING]
 
call NET_send_event
call net_send_event
 
xor eax, eax
ret
552,18 → 546,20
 
 
 
;-----------------------------------------------------------------
;
; NET_ptr_to_num
;
; IN: ebx = ptr to device struct
; OUT: edi = -1 on error, device number otherwise
;
;-----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; net_ptr_to_num ;
; ;
; IN: ebx = ptr to device struct ;
; ;
; OUT: edi = device number ;
; edi = -1 on error ;
; ;
;-----------------------------------------------------------------;
align 4
NET_ptr_to_num:
net_ptr_to_num:
 
call NET_ptr_to_num4
call net_ptr_to_num4
ror edi, 2 ; If -1, stay -1
; valid device numbers have last two bits 0, so do just shr
 
570,7 → 566,7
ret
 
align 4
NET_ptr_to_num4: ; Todo, place number in device structure so we only need to verify?
net_ptr_to_num4: ; Todo, place number in device structure so we only need to verify?
 
test ebx, ebx
jz .fail
595,21 → 591,17
pop ecx
ret
 
;-----------------------------------------------------------------
;
; checksum_1
;
; This is the first of two functions needed to calculate a checksum.
;
; IN: edx = start offset for semi-checksum
; esi = pointer to data
; ecx = data size
; OUT: edx = semi-checksum
;
;
; Code was optimized by diamond
;
;-----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; checksum_1: Calculate semi-checksum for network packets. ;
; ;
; IN: edx = start offset for semi-checksum ;
; esi = pointer to data ;
; ecx = data size ;
; ;
; OUT: edx = semi-checksum ;
; ;
;-----------------------------------------------------------------;
align 4
checksum_1:
 
679,16 → 671,15
.end:
ret
 
;-----------------------------------------------------------------
;
; checksum_2
;
; This function calculates the final ip/tcp/udp checksum for you
;
; IN: edx = semi-checksum
; OUT: dx = checksum (in INET byte order)
;
;-----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; checksum_2: Calculate the final ip/tcp/udp checksum. ;
; ;
; IN: edx = semi-checksum ;
; ;
; OUT: dx = checksum (in INET byte order) ;
; ;
;-----------------------------------------------------------------;
align 4
checksum_2:
 
713,11 → 704,11
 
 
 
;----------------------------------------------------------------
;
; System function to work with network devices (74)
;
;----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; System function 74: Low level access to network devices. ;
; ;
;-----------------------------------------------------------------;
align 4
sys_network:
 
834,11 → 825,11
 
 
 
;----------------------------------------------------------------
;
; System function to work with protocols (76)
;
;----------------------------------------------------------------
;-----------------------------------------------------------------;
; ;
; System function 76: Low level access to protocol handlers. ;
; ;
;-----------------------------------------------------------------;
align 4
sys_protocols:
cmp bh, NET_DEVICES_MAX ; Check if device number exists
856,28 → 847,28
shr eax, 16 ;
 
cmp ax, API_ETH
je ETH_api
je eth_api
 
cmp ax, API_IPv4
je IPv4_api
je ipv4_api
 
cmp ax, API_ICMP
je ICMP_api
je icmp_api
 
cmp ax, API_UDP
je UDP_api
je udp_api
 
cmp ax, API_TCP
je TCP_api
je tcp_api
 
cmp ax, API_ARP
je ARP_api
je arp_api
 
cmp ax, API_PPPOE
je PPPoE_api
je pppoe_api
 
cmp ax, API_IPv6
je IPv6_api
je ipv6_api
 
add esp, 4 ; if we reached here, no function was called, so we need to balance stack