Subversion Repositories Kolibri OS

Rev

Rev 2010 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2010 Rev 2434
Line 28... Line 28...
28
;;                                                                 ;;
28
;;                                                                 ;;
29
;;  See file COPYING for details                                   ;;
29
;;  See file COPYING for details                                   ;;
30
;;                                                                 ;;
30
;;                                                                 ;;
31
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
31
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 32... Line 32...
32
 
32
 
Line 33... Line 33...
33
$Revision: 2010 $
33
$Revision: 2434 $
34
 
34
 
35
 
35
 
36
;********************************************************************
36
;********************************************************************
37
;   Interface
37
;   Interface
38
;      ethernet_driver   called by stack_handler in stack.inc
38
;      ethernet_driver   called by stack_handler in stack.inc
Line 39... Line 39...
39
;      eth_probe         called by app_stack_handler in stack.inc
39
;      eth_probe         called by app_stack_handler in stack.inc
40
;
40
;
41
;********************************************************************
41
;********************************************************************
Line 42... Line 42...
42
 
42
 
43
ETHER_IP		    equ     0x0008	; Reversed from 0800 for intel
43
ETHER_IP                    equ     0x0008      ; Reversed from 0800 for intel
44
ETHER_ARP		    equ     0x0608	; Reversed from 0806 for intel
44
ETHER_ARP                   equ     0x0608      ; Reversed from 0806 for intel
45
ETHER_RARP		    equ     0x3580
45
ETHER_RARP                  equ     0x3580
46
 
46
 
47
struc ETH_FRAME
47
struc ETH_FRAME
Line 48... Line 48...
48
{  .DstMAC	 dp   ?  ;destination MAC-address [6 bytes]
48
{  .DstMAC       dp   ?  ;destination MAC-address [6 bytes]
49
   .SrcMAC	 dp   ?  ;source MAC-address [6 bytes]
49
   .SrcMAC       dp   ?  ;source MAC-address [6 bytes]
50
   .Type	 dw   ?  ;type of the upper-layer protocol [2 bytes]
50
   .Type         dw   ?  ;type of the upper-layer protocol [2 bytes]
Line 115... Line 115...
115
; The last entry must be kept at all zeros, to indicate the end of the list
115
; The last entry must be kept at all zeros, to indicate the end of the list
116
; As a PCI driver may support more than one hardware implementation, there may
116
; As a PCI driver may support more than one hardware implementation, there may
117
; be several lines which refer to the same functions.
117
; be several lines which refer to the same functions.
118
; The first driver found on the PCI bus will be the one used.
118
; The first driver found on the PCI bus will be the one used.
Line 119... Line 119...
119
 
119
 
Line 120... Line 120...
120
PCICARDS_ENTRY_SIZE	    equ     24	  ; Size of each PCICARDS entry
120
PCICARDS_ENTRY_SIZE         equ     24    ; Size of each PCICARDS entry
121
 
121
 
122
iglobal
122
iglobal
123
PCICards:
123
PCICards:
124
dd  0x12098086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
124
dd  0x12098086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
125
dd  0x10298086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
125
dd  0x10298086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
126
dd  0x12298086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
126
dd  0x12298086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
-
 
127
dd  0x10308086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
Line 127... Line 128...
127
dd  0x10308086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
128
dd  0x24498086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
Line 128... Line 129...
128
dd  0x24498086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
129
dd  0x10688086, I8255x_probe, I8255x_reset, I8255x_poll, I8255x_transmit, 0
129
 
130
 
130
dd  0x802910ec, rtl8029_probe, rtl8029_reset, rtl8029_poll, rtl8029_transmit, 0
131
dd  0x802910ec, rtl8029_probe, rtl8029_reset, rtl8029_poll, rtl8029_transmit, 0
131
 
132
 
132
;dd  0x813910ec, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
133
dd  0x813910ec, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
133
;dd  0x813810ec, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
134
dd  0x813810ec, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
134
;dd  0x12111113, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
135
dd  0x12111113, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
135
;dd  0x13601500, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
136
dd  0x13601500, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
136
;dd  0x13604033, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
137
dd  0x13604033, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
137
;dd  0x13001186, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
138
dd  0x13001186, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
138
;dd  0x13401186, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
139
dd  0x13401186, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
139
;dd  0xab0613d1, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
140
dd  0xab0613d1, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
140
;dd  0xa1171259, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
141
dd  0xa1171259, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
141
;dd  0xa11e1259, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
142
dd  0xa11e1259, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
142
;dd  0xab0614ea, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
143
dd  0xab0614ea, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
143
;dd  0xab0714ea, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
144
dd  0xab0714ea, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
144
;dd  0x123411db, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
145
dd  0x123411db, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
145
;dd  0x91301432, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
146
dd  0x91301432, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
146
;dd  0x101202ac, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
147
dd  0x101202ac, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
Line 147... Line 148...
147
;dd  0x0106018a, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
148
dd  0x0106018a, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
148
;dd  0x1211126c, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
149
dd  0x1211126c, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
149
;dd  0x81391743, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
150
dd  0x81391743, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
150
;dd  0x8139021b, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
151
dd  0x8139021b, rtl8139_probe, rtl8139_reset, rtl8139_poll, rtl8139_transmit, rtl8139_cable
Line 236... Line 237...
236
dd  0x0ab310de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
237
dd  0x0ab310de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
237
dd  0x0d7d10de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
238
dd  0x0d7d10de, forcedeth_probe, forcedeth_reset, forcedeth_poll, forcedeth_transmit, forcedeth_cable ; not tested
Line 238... Line 239...
238
 
239
 
Line 239... Line 240...
239
dd  0x604017F3, r6040_probe, r6040_reset, r6040_poll, r6040_transmit, 0
240
dd  0x604017F3, r6040_probe, r6040_reset, r6040_poll, r6040_transmit, 0
240
 
241
 
Line 241... Line 242...
241
rb PCICARDS_ENTRY_SIZE	; end of list marker, do not remove
242
rb PCICARDS_ENTRY_SIZE  ; end of list marker, do not remove
242
endg
243
endg
-
 
244
 
243
 
245
uglobal
-
 
246
;Net-stack's interface's settings
244
uglobal
247
  node_addr:
-
 
248
                      db  0,0,0,0,0,0
245
;Net-stack's interface's settings
249
  gateway_ip:
246
  node_addr:	      db  0,0,0,0,0,0
250
                      dd  0
247
  gateway_ip:	      dd  0
251
  dns_ip:
-
 
252
                      dd  0
-
 
253
 
248
  dns_ip:	      dd  0
254
  eth_rx_data_len:
-
 
255
                      dw  0
249
 
256
  eth_status:
-
 
257
                      dd  0
250
  eth_rx_data_len:    dw  0
258
  io_addr:
251
  eth_status:	      dd  0
259
                      dd  0
-
 
260
  hdrtype:
-
 
261
                      db  0
252
  io_addr:	      dd  0
262
  vendor_device:
-
 
263
                      dd  0
253
  hdrtype:	      db  0
264
  pci_data:
-
 
265
                      dd  0
254
  vendor_device:      dd  0
266
  pci_dev:
Line 255... Line 267...
255
  pci_data:	      dd  0
267
                      dd  0
-
 
268
  pci_bus:
256
  pci_dev:	      dd  0
269
                      dd  0
-
 
270
 
257
  pci_bus:	      dd  0
271
  ; These will hold pointers to the selected driver functions
-
 
272
  drvr_probe:
258
 
273
                      dd  0
259
  ; These will hold pointers to the selected driver functions
274
  drvr_reset:
-
 
275
                      dd  0
-
 
276
  drvr_poll:
260
  drvr_probe:	      dd  0
277
                      dd  0
Line 261... Line 278...
261
  drvr_reset:	      dd  0
278
  drvr_transmit:
Line 262... Line 279...
262
  drvr_poll:	      dd  0
279
                      dd  0
-
 
280
  drvr_cable:
263
  drvr_transmit:      dd  0
281
                      dd  0
-
 
282
 
264
  drvr_cable:	      dd  0
283
endg
265
 
284
 
Line 266... Line 285...
266
endg
285
iglobal
267
 
286
  broadcast_add:
Line 290... Line 309...
290
;***************************************************************************
309
;***************************************************************************
291
proc eth_tx stdcall uses ebx esi edi
310
proc eth_tx stdcall uses ebx esi edi
292
local MACAddress  dp  ?  ;allocate 6 bytes in the stack
311
local MACAddress  dp  ?  ;allocate 6 bytes in the stack
Line 293... Line 312...
293
 
312
 
294
    ; Look for a buffer to tx
313
    ; Look for a buffer to tx
295
    mov     eax, NET1OUT_QUEUE
314
        mov     eax, NET1OUT_QUEUE
296
    call    dequeue
315
        call    dequeue
297
    cmp     ax, NO_BUFFER
316
        cmp     ax, NO_BUFFER
Line 298... Line 317...
298
    je	    .exit	     ; Exit if no buffer available
317
        je      .exit        ; Exit if no buffer available
Line 299... Line 318...
299
 
318
 
300
    push    eax  ;save buffer number
319
        push    eax;save buffer number
301
 
320
 
Line 302... Line 321...
302
    ; convert buffer pointer eax to the absolute address
321
    ; convert buffer pointer eax to the absolute address
303
    imul    eax, IPBUFFSIZE
322
        imul    eax, IPBUFFSIZE
304
    add     eax, IPbuffs
323
        add     eax, IPbuffs
305
 
324
 
306
    ; Extract the destination IP
325
    ; Extract the destination IP
Line 307... Line 326...
307
    ; find the destination IP in the ARP table, get MAC
326
    ; find the destination IP in the ARP table, get MAC
308
    ; store this MAC in 'MACAddress'
327
    ; store this MAC in 'MACAddress'
309
    mov     ebx, eax		   ; Save buffer address
328
        mov     ebx, eax           ; Save buffer address
310
    mov     edx, [ebx + 16]	   ; get destination address
329
        mov     edx, [ebx + 16]    ; get destination address
311
 
330
 
312
    ; If the destination address is 255.255.255.255,
331
    ; If the destination address is 255.255.255.255,
313
    ; set the MACAddress to all ones ( broadcast )
332
    ; set the MACAddress to all ones ( broadcast )
314
    cld
333
        cld
315
    mov     esi, broadcast_add
334
        mov     esi, broadcast_add
Line 316... Line 335...
316
    lea     edi, [MACAddress]
335
        lea     edi, [MACAddress]
317
    movsd
336
        movsd
Line 318... Line 337...
318
    movsw
337
        movsw
319
    cmp     edx, 0xffffffff
338
        cmp     edx, 0xffffffff
Line 320... Line 339...
320
    je	    .send		 ; If it is broadcast, just send
339
        je      .send            ; If it is broadcast, just send
321
 
340
 
322
    lea     eax, [MACAddress]	 ;cause this is local variable
341
        lea     eax, [MACAddress];cause this is local variable
Line 323... Line 342...
323
    stdcall arp_table_manager, ARP_TABLE_IP_TO_MAC, edx, eax ;opcode,IP,MAC_ptr - Get the MAC address.
342
        stdcall arp_table_manager, ARP_TABLE_IP_TO_MAC, edx, eax;opcode,IP,MAC_ptr - Get the MAC address.
324
 
343
 
325
    cmp     eax, ARP_VALID_MAPPING
344
        cmp     eax, ARP_VALID_MAPPING
326
    je	    .send
345
        je      .send
327
 
346
 
328
    ; No valid entry. Has the request been sent, but timed out?
347
    ; No valid entry. Has the request been sent, but timed out?
Line 329... Line 348...
329
    cmp     eax, ARP_RESPONSE_TIMEOUT
348
        cmp     eax, ARP_RESPONSE_TIMEOUT
330
    je	    .freebuf
349
        je      .freebuf
331
 
350
 
332
  .wait_response:		    ;we wait arp-response
351
  .wait_response:                   ;we wait arp-response
333
				    ; Re-queue the packet, and exit
352
                                    ; Re-queue the packet, and exit
334
    pop     ebx
353
        pop     ebx
335
    mov     eax, NET1OUT_QUEUE
354
        mov     eax, NET1OUT_QUEUE
336
    call    queue			 ; Get the buffer back
355
        call    queue                    ; Get the buffer back
337
    jmp     .exit
356
        jmp     .exit
Line 338... Line 357...
338
 
357
 
339
  .send:    ;if ARP_VALID_MAPPING then send the packet
358
  .send:    ;if ARP_VALID_MAPPING then send the packet
Line 340... Line 359...
340
    lea     edi, [MACAddress]	  ; Pointer to 48 bit destination address
359
        lea     edi, [MACAddress] ; Pointer to 48 bit destination address
341
    movzx   ecx, word[ebx+2]	  ; Size of IP packet to send
360
        movzx   ecx, word[ebx+2]  ; Size of IP packet to send
342
    xchg    ch, cl		  ; because mirror byte-order
361
        xchg    ch, cl            ; because mirror byte-order
343
    mov     esi, ebx		  ; Pointer to packet data
362
        mov     esi, ebx          ; Pointer to packet data
Line 344... Line 363...
344
    mov     bx, ETHER_IP	  ; Type of packet
363
        mov     bx, ETHER_IP      ; Type of packet
345
    push    ebp
364
        push    ebp
346
    call    dword [drvr_transmit] ; Call the drivers transmit function
365
        call    dword [drvr_transmit]; Call the drivers transmit function
Line 347... Line 366...
347
    pop     ebp
366
        pop     ebp
348
 
367
 
349
    ; OK, we have sent a packet, so increment the count
368
    ; OK, we have sent a packet, so increment the count
Line 374... Line 393...
374
;***************************************************************************
393
;***************************************************************************
375
;uglobal
394
;uglobal
376
;  ether_IP_handler_cnt dd ?
395
;  ether_IP_handler_cnt dd ?
377
;endg
396
;endg
378
ether_IP_handler:
397
ether_IP_handler:
379
    mov     eax, EMPTY_QUEUE
398
        mov     eax, EMPTY_QUEUE
380
    call    dequeue
399
        call    dequeue
381
    cmp     ax, NO_BUFFER
400
        cmp     ax, NO_BUFFER
382
    je	    eiph00x
401
        je      eiph00x
Line 383... Line 402...
383
 
402
 
384
    ; convert buffer pointer eax to the absolute address
403
    ; convert buffer pointer eax to the absolute address
385
    push    eax
404
        push    eax
386
    mov     ecx, IPBUFFSIZE
405
        mov     ecx, IPBUFFSIZE
387
    mul     ecx
406
        mul     ecx
Line 388... Line 407...
388
    add     eax, IPbuffs
407
        add     eax, IPbuffs
Line 389... Line 408...
389
 
408
 
390
    mov     edi, eax
409
        mov     edi, eax
Line 391... Line 410...
391
 
410
 
392
    ; get a pointer to the start of the DATA
411
    ; get a pointer to the start of the DATA
393
    mov     esi, ETH_FRAME.Data
412
        mov     esi, ETH_FRAME.Data
394
 
413
 
395
    ; Now store it all away
414
    ; Now store it all away
Line 396... Line 415...
396
    mov     ecx, IPBUFFSIZE / 4     ; Copy all of the available
415
        mov     ecx, IPBUFFSIZE / 4 ; Copy all of the available
397
			      ; data across - worse case
416
                              ; data across - worse case
Line 398... Line 417...
398
    cld
417
        cld
399
    rep     movsd
418
        rep movsd
400
 
419
 
401
;        inc     [ether_IP_handler_cnt]
420
;        inc     [ether_IP_handler_cnt]
Line 402... Line 421...
402
;        DEBUGF  1, "K : ether_IP_handler (%u)\n", [ether_IP_handler_cnt]
421
;        DEBUGF  1, "K : ether_IP_handler (%u)\n", [ether_IP_handler_cnt]
403
 
422
 
Line 404... Line 423...
404
    ; And finally, place the buffer in the IPRX queue
423
    ; And finally, place the buffer in the IPRX queue
405
    pop     ebx
424
        pop     ebx
406
    mov     eax, IPIN_QUEUE
425
        mov     eax, IPIN_QUEUE
407
    call    queue
426
        call    queue
Line 421... Line 440...
421
;
440
;
422
;        eax is 0 if no hardware found
441
;        eax is 0 if no hardware found
423
;***************************************************************************
442
;***************************************************************************
424
eth_probe:
443
eth_probe:
425
    ; Find a card on the PCI bus, and get it's address
444
    ; Find a card on the PCI bus, and get it's address
426
    call    scan_bus			; Find the ethernet cards PIC address
445
        call    scan_bus                ; Find the ethernet cards PIC address
427
    xor     eax, eax
446
        xor     eax, eax
428
    cmp     [io_addr], eax
447
        cmp     [io_addr], eax
429
    je	    ep_00x			; Return 0 in eax if no cards found
448
        je      ep_00x                  ; Return 0 in eax if no cards found
Line 430... Line 449...
430
 
449
 
Line 431... Line 450...
431
    call    dword [drvr_probe]		; Call the drivers probe function
450
        call    dword [drvr_probe]      ; Call the drivers probe function
Line 432... Line 451...
432
 
451
 
433
    mov     eax, [io_addr]		; return a non zero value
452
        mov     eax, [io_addr]          ; return a non zero value
Line 434... Line 453...
434
 
453
 
435
ep_00x:
454
ep_00x:
436
    ret
455
        ret
437
 
456
 
Line 444... Line 463...
444
;       This is a kernel function, called by stack_handler
463
;       This is a kernel function, called by stack_handler
445
;
464
;
446
;***************************************************************************
465
;***************************************************************************
447
ethernet_driver:
466
ethernet_driver:
448
    ; Do nothing if the driver is inactive
467
    ; Do nothing if the driver is inactive
449
    cmp     [ethernet_active], byte 0
468
        cmp     [ethernet_active], byte 0
450
    je	    eth_exit
469
        je      eth_exit
Line 451... Line 470...
451
 
470
 
452
    call    eth_rx
471
        call    eth_rx
Line 453... Line 472...
453
    call    eth_tx
472
        call    eth_tx
454
 
473
 
Line 455... Line 474...
455
eth_exit:
474
eth_exit:
456
    ret
475
        ret
457
 
476
 
458
;***************************************************************************
477
;***************************************************************************
Line 466... Line 485...
466
;               being tx'ed
485
;               being tx'ed
467
;         IP  : Store in an IP buffer
486
;         IP  : Store in an IP buffer
468
;
487
;
469
;***************************************************************************
488
;***************************************************************************
470
eth_rx:
489
eth_rx:
471
    xor     ax, ax
490
        xor     ax, ax
472
    mov     [eth_rx_data_len], ax
491
        mov     [eth_rx_data_len], ax
473
    call    dword [drvr_poll]	    ; Call the drivers poll function
492
        call    dword [drvr_poll]   ; Call the drivers poll function
474
 
493
 
475
    mov     ax, [eth_rx_data_len]
494
        mov     ax, [eth_rx_data_len]
476
    cmp     ax, 0
495
        cmp     ax, 0
477
    je	    .exit
496
        je      .exit
Line 478... Line 497...
478
 
497
 
Line 479... Line 498...
479
 
498
 
Line 480... Line 499...
480
    ; Check the protocol. Call appropriate handler
499
    ; Check the protocol. Call appropriate handler
481
 
500
 
Line 482... Line 501...
482
    mov     ax, [ETH_FRAME.Type]    ; The address of the protocol word
501
        mov     ax, [ETH_FRAME.Type]; The address of the protocol word
483
 
502
 
Line 484... Line 503...
484
    cmp     ax, ETHER_IP
503
        cmp     ax, ETHER_IP
485
    je	    .is_ip		     ; It's IP
504
        je      .is_ip               ; It's IP
486
 
505
 
Line 487... Line 506...
487
    cmp     ax, ETHER_ARP
506
        cmp     ax, ETHER_ARP
488
    je	    .is_arp		     ; It is ARP
507
        je      .is_arp              ; It is ARP
489
 
508
 
490
    DEBUGF  1,"K : eth_rx - dumped (%u)\n", ax
509
    DEBUGF  1,"K : eth_rx - dumped (%u)\n", ax
491
    inc     [dumped_rx_count]
510
        inc     [dumped_rx_count]
Line 492... Line 511...
492
    jmp     .exit		; If not IP or ARP, ignore
511
        jmp     .exit           ; If not IP or ARP, ignore
493
 
512
 
494
  .is_ip:
513
  .is_ip:
495
;    DEBUGF  1,"K : eth_rx - IP packet\n"
514
;    DEBUGF  1,"K : eth_rx - IP packet\n"
Line 496... Line 515...
496
    inc     dword [ip_rx_count]
515
        inc     dword [ip_rx_count]
497
    call    ether_IP_handler
516
        call    ether_IP_handler