Subversion Repositories Kolibri OS

Rev

Rev 5524 | Rev 5536 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5524 Rev 5528
Line 19... Line 19...
19
;;          GNU GENERAL PUBLIC LICENSE                             ;;
19
;;          GNU GENERAL PUBLIC LICENSE                             ;;
20
;;             Version 2, June 1991                                ;;
20
;;             Version 2, June 1991                                ;;
21
;;                                                                 ;;
21
;;                                                                 ;;
22
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
22
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 23... Line 23...
23
 
23
 
Line 24... Line 24...
24
$Revision: 5524 $
24
$Revision: 5528 $
25
 
25
 
26
uglobal
26
uglobal
27
        net_10ms        dd ?
27
        net_10ms        dd ?
Line 28... Line 28...
28
        net_tmr_count   dw ?
28
        net_tmr_count   dw ?
29
endg
29
endg
Line 30... Line 30...
30
 
30
 
-
 
31
DEBUG_NETWORK_ERROR     = 1
-
 
32
DEBUG_NETWORK_VERBOSE   = 0
31
DEBUG_NETWORK_ERROR     = 1
33
 
Line 32... Line 34...
32
DEBUG_NETWORK_VERBOSE   = 0
34
NET_DEVICES_MAX         = 16
33
 
35
NET_BUFFERS             = 512
34
NET_DEVICES_MAX         = 16
36
NET_BUFFER_SIZE         = 2048
Line 144... Line 146...
144
NET_DEVICE_LOOPBACK     = 0
146
NET_DEVICE_LOOPBACK     = 0
145
NET_DEVICE_ETH          = 1
147
NET_DEVICE_ETH          = 1
146
NET_DEVICE_SLIP         = 2
148
NET_DEVICE_SLIP         = 2
Line 147... Line 149...
147
 
149
 
148
; Network link types (link protocols)
150
; Network link types (link protocols)
149
NET_LINK_LOOPBACK       = 0     ;;; Really a link type?
151
NET_LINK_LOOPBACK       = 0
150
NET_LINK_MAC            = 1     ; Media access control (ethernet, isdn, ...)
152
NET_LINK_MAC            = 1     ; Media access control (ethernet, isdn, ...)
151
NET_LINK_PPP            = 2     ; Point to Point Protocol (PPPoE, ...)
153
NET_LINK_PPP            = 2     ; Point to Point Protocol (PPPoE, ...)
Line 152... Line 154...
152
NET_LINK_IEEE802.11     = 3     ; IEEE 802.11 (WiFi)
154
NET_LINK_IEEE802.11     = 3     ; IEEE 802.11 (WiFi)
Line 243... Line 245...
243
align 4
245
align 4
Line 244... Line 246...
244
 
246
 
245
        NET_RUNNING     dd  ?
247
        NET_RUNNING     dd ?
Line -... Line 248...
-
 
248
        NET_DRV_LIST    rd NET_DEVICES_MAX
-
 
249
 
-
 
250
        NET_BUFFS_FREE  rd NET_BUFFERS
246
        NET_DRV_LIST    rd  NET_DEVICES_MAX
251
        .current        dd ?
Line 247... Line 252...
247
 
252
 
248
endg
253
endg
Line 259... Line 264...
259
;
264
;
260
;-----------------------------------------------------------------
265
;-----------------------------------------------------------------
261
align 4
266
align 4
262
stack_init:
267
stack_init:
Line -... Line 268...
-
 
268
 
-
 
269
; allocate network buffers
-
 
270
        stdcall kernel_alloc, NET_BUFFER_SIZE*NET_BUFFERS
-
 
271
        test    eax, eax
-
 
272
        jz      .fail
-
 
273
 
-
 
274
        mov     edi, NET_BUFFS_FREE
-
 
275
        mov     ecx, NET_BUFFERS
-
 
276
        cld
-
 
277
  .loop:
-
 
278
        stosd
-
 
279
        add     eax, NET_BUFFER_SIZE
-
 
280
        dec     ecx
-
 
281
        jnz     .loop
-
 
282
 
-
 
283
        mov     eax, NET_BUFFS_FREE
-
 
284
        stosd
263
 
285
 
264
; Init the network drivers list
286
; Init the network drivers list
265
        xor     eax, eax
287
        xor     eax, eax
266
        mov     edi, NET_RUNNING
288
        mov     edi, NET_RUNNING
267
        mov     ecx, (NET_DEVICES_MAX + 1)
289
        mov     ecx, (NET_DEVICES_MAX + 1)
Line 282... Line 304...
282
        SOCKET_init
304
        SOCKET_init
Line 283... Line 305...
283
 
305
 
Line 284... Line 306...
284
        LOOP_init
306
        LOOP_init
-
 
307
 
Line -... Line 308...
-
 
308
        mov     [net_tmr_count], 0
-
 
309
        ret
285
 
310
 
Line 286... Line 311...
286
        mov     [net_tmr_count], 0
311
  .fail:
Line 341... Line 366...
341
  .exit:
366
  .exit:
342
        ret
367
        ret
Line 343... Line 368...
343
 
368
 
344
 
369
 
-
 
370
align 4
345
align 4
371
proc NET_BUFF_alloc stdcall, buffersize
-
 
372
        cmp     [buffersize], NET_BUFFER_SIZE
-
 
373
        ja      .too_large
-
 
374
 
-
 
375
        spin_lock_irqsave
-
 
376
 
-
 
377
        mov     eax, [NET_BUFFS_FREE.current]
-
 
378
        cmp     eax, NET_BUFFS_FREE+NET_BUFFERS*4
-
 
379
        jae     .out_of_mem
-
 
380
        mov     eax, [eax]
-
 
381
        add     [NET_BUFFS_FREE.current], 4
-
 
382
 
-
 
383
        spin_unlock_irqrestore
-
 
384
 
-
 
385
        DEBUGF  1, "net alloc: 0x%x\n", eax
-
 
386
        ret
-
 
387
 
-
 
388
  .out_of_mem:
-
 
389
        spin_unlock_irqrestore
-
 
390
 
-
 
391
        xor     eax, eax
-
 
392
        DEBUGF  DEBUG_NETWORK_ERROR, "NET_BUFF_alloc: out of mem!\n"
-
 
393
        ret
-
 
394
 
-
 
395
  .too_large:
-
 
396
        xor     eax, eax
-
 
397
        DEBUGF  DEBUG_NETWORK_ERROR, "NET_BUFF_alloc: too large!\n"
Line 346... Line 398...
346
NET_BUFF_alloc:
398
        ret
347
        jmp     kernel_alloc
399
endp
-
 
400
 
-
 
401
 
-
 
402
align 4
-
 
403
proc NET_BUFF_free stdcall, buffer
-
 
404
 
-
 
405
        DEBUGF  1, "net free: 0x%x\n", [buffer]
-
 
406
 
-
 
407
        spin_lock_irqsave
348
 
408
 
-
 
409
        sub     [NET_BUFFS_FREE.current], 4
-
 
410
        mov     eax, [NET_BUFFS_FREE.current]
-
 
411
        push    [buffer]
-
 
412
        pop     dword[eax]
-
 
413
 
Line 349... Line 414...
349
 
414
        spin_unlock_irqrestore
350
align 4
415