Subversion Repositories Kolibri OS

Rev

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

Rev 1257 Rev 1259
Line 12... Line 12...
12
;;          GNU GENERAL PUBLIC LICENSE                             ;;
12
;;          GNU GENERAL PUBLIC LICENSE                             ;;
13
;;             Version 2, June 1991                                ;;
13
;;             Version 2, June 1991                                ;;
14
;;                                                                 ;;
14
;;                                                                 ;;
15
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 16... Line 16...
16
 
16
 
Line 17... Line 17...
17
$Revision: 1257 $
17
$Revision: 1259 $
18
 
18
 
Line 19... Line 19...
19
MAX_ETH_DEVICES 	equ MAX_NET_DEVICES
19
MAX_ETH_DEVICES 	equ MAX_NET_DEVICES
Line 55... Line 55...
55
uglobal
55
uglobal
Line 56... Line 56...
56
 
56
 
57
	ETH_RUNNING	dd  ?
57
	ETH_RUNNING	dd  ?
58
	ETH_DRV_LIST	rd  MAX_ETH_DEVICES
58
	ETH_DRV_LIST	rd  MAX_ETH_DEVICES
-
 
59
	ETH_IN_QUEUE	rd  3*ETH_QUEUE_SIZE+3
59
	ETH_IN_QUEUE	rd  3*ETH_QUEUE_SIZE+3
60
if QUEUE_BEFORE_SENDING
-
 
61
	ETH_OUT_QUEUE	rd  3*ETH_QUEUE_SIZE+3
60
	ETH_OUT_QUEUE	rd  3*ETH_QUEUE_SIZE+3
62
end if
Line 61... Line 63...
61
endg
63
endg
62
 
64
 
Line 78... Line 80...
78
	mov	edi, ETH_RUNNING
80
	mov	edi, ETH_RUNNING
79
	mov	ecx, (1+MAX_ETH_DEVICES)
81
	mov	ecx, (1+MAX_ETH_DEVICES)
80
	rep	stosd
82
	rep	stosd
Line 81... Line 83...
81
 
83
 
-
 
84
	init_queue ETH_IN_QUEUE
-
 
85
 
82
	init_queue ETH_IN_QUEUE
86
if QUEUE_BEFORE_SENDING
-
 
87
	init_queue ETH_OUT_QUEUE
Line 83... Line 88...
83
	init_queue ETH_OUT_QUEUE
88
end if
Line 84... Line 89...
84
 
89
 
Line 106... Line 111...
106
	jge	.error
111
	jge	.error
Line 107... Line 112...
107
 
112
 
108
	test	eax, eax
113
	test	eax, eax
109
	jnz	.notfirst
114
	jnz	.notfirst
-
 
115
	mov	dword [ETH_IN_QUEUE], eax
110
	mov	dword [ETH_IN_QUEUE], eax
116
if QUEUE_BEFORE_SENDING
-
 
117
	mov	dword [ETH_OUT_QUEUE], eax
111
	mov	dword [ETH_OUT_QUEUE], eax
118
end if
Line 112... Line 119...
112
      .notfirst:
119
      .notfirst:
113
 
120
 
114
	mov	eax, ebx
121
	mov	eax, ebx
Line 174... Line 181...
174
 
181
 
175
	dec	[ETH_RUNNING]
182
	dec	[ETH_RUNNING]
Line 176... Line 183...
176
	jnz	.notlast
183
	jnz	.notlast
-
 
184
 
177
 
185
	mov	dword [ETH_IN_QUEUE], ETH_QUEUE_SIZE
-
 
186
if QUEUE_BEFORE_SENDING
Line 178... Line 187...
178
	mov	dword [ETH_IN_QUEUE], ETH_QUEUE_SIZE
187
	mov	dword [ETH_OUT_QUEUE], ETH_QUEUE_SIZE
179
	mov	dword [ETH_OUT_QUEUE], ETH_QUEUE_SIZE
188
end if
Line 180... Line 189...
180
 
189
 
Line 286... Line 295...
286
;  OUT: /
295
;  OUT: /
287
;
296
;
288
;-----------------------------------------------------------------
297
;-----------------------------------------------------------------
289
align 4
298
align 4
290
ETH_sender:
299
ETH_sender:
291
 
-
 
-
 
300
if QUEUE_BEFORE_SENDING
292
	DEBUGF	1,"ETH_Sender: queuing for device: %x, %u bytes\n", [esp], [esp + 4]
301
	DEBUGF	1,"ETH_Sender: queuing for device: %x, %u bytes\n", [esp], [esp + 4]
Line 293... Line 302...
293
 
302
 
294
	push	ebx
303
	push	ebx
295
	mov	esi, esp
304
	mov	esi, esp
Line 328... Line 337...
328
	mov	ebx, [esi]
337
	mov	ebx, [esi]
329
	pushd	[esi + 8]
338
	pushd	[esi + 8]
330
	pushd	[esi + 4]
339
	pushd	[esi + 4]
Line 331... Line 340...
331
 
340
 
332
	DEBUGF	1,"dequeued packet for device %x\n", ebx
341
	DEBUGF	1,"dequeued packet for device %x\n", ebx
333
 
342
end if
334
	call	[ebx+ETH_DEVICE.transmit]	; we will return to get_from_queue macro after transmitting packet
343
	call	[ebx+ETH_DEVICE.transmit]	; we will return to get_from_queue macro after transmitting packet
335
	call	kernel_free
344
	call	kernel_free
Line 336... Line 345...
336
	add	esp, 4 ; pop (balance stack)
345
	add	esp, 4 ; pop (balance stack)
Line 542... Line 551...
542
	add	eax, ETH_IN_QUEUE
551
	add	eax, ETH_IN_QUEUE
543
	mov	eax, [eax + queue.size]
552
	mov	eax, [eax + queue.size]
544
	ret
553
	ret
Line 545... Line 554...
545
 
554
 
-
 
555
.out_queue:
546
.out_queue:
556
if QUEUE_BEFORE_SENDING
547
	add	eax, ETH_OUT_QUEUE
557
	add	eax, ETH_OUT_QUEUE
-
 
558
	mov	eax, [eax + queue.size]
-
 
559
else
-
 
560
	mov	eax, -1
548
	mov	eax, [eax + queue.size]
561
end if
549
	ret
562
	ret