Subversion Repositories Kolibri OS

Rev

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

Rev 1241 Rev 1249
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: 1241 $
17
$Revision: 1249 $
18
 
18
 
Line 19... Line 19...
19
MAX_ETH_DEVICES 	equ MAX_NET_DEVICES
19
MAX_ETH_DEVICES 	equ MAX_NET_DEVICES
Line 78... Line 78...
78
	xor	eax, eax
78
	xor	eax, eax
79
	mov	edi, ETH_RUNNING
79
	mov	edi, ETH_RUNNING
80
	mov	ecx, (1+MAX_ETH_DEVICES)
80
	mov	ecx, (1+MAX_ETH_DEVICES)
81
	rep	stosd
81
	rep	stosd
Line 82... Line 82...
82
 
82
 
83
	mov	dword [ETH_IN_QUEUE], ETH_QUEUE_SIZE
-
 
84
	mov	dword [ETH_IN_QUEUE+4], ETH_IN_QUEUE + queue.data
-
 
85
	mov	dword [ETH_IN_QUEUE+8], ETH_IN_QUEUE + queue.data
-
 
86
 
83
	init_queue ETH_IN_QUEUE
87
	mov	dword [ETH_OUT_QUEUE], ETH_QUEUE_SIZE
-
 
88
	mov	dword [ETH_OUT_QUEUE+4], ETH_OUT_QUEUE + queue.data
-
 
Line 89... Line 84...
89
	mov	dword [ETH_OUT_QUEUE+8], ETH_OUT_QUEUE + queue.data
84
	init_queue ETH_OUT_QUEUE
Line 90... Line 85...
90
 
85
 
Line 102... Line 97...
102
;  OUT: Device num in eax, -1 on error
97
;  OUT: Device num in eax, -1 on error
103
;
98
;
104
;---------------------------------------------------------
99
;---------------------------------------------------------
Line 105... Line 100...
105
 
100
 
106
align 4
101
align 4
Line 107... Line 102...
107
ETH_Add_Device:
102
ETH_add_device:
Line 108... Line 103...
108
 
103
 
109
	DEBUGF	1,"ETH_Add_Device: %x ", ebx
104
	DEBUGF	1,"ETH_Add_Device: %x ", ebx
Line 120... Line 115...
120
 
115
 
121
	mov	eax, ebx
116
	mov	eax, ebx
122
	mov	ecx, MAX_ETH_DEVICES	  ; We need to check whole list because a device may be removed without re-organizing list
117
	mov	ecx, MAX_ETH_DEVICES	  ; We need to check whole list because a device may be removed without re-organizing list
Line 123... Line -...
123
	mov	edi, ETH_DRV_LIST
-
 
124
 
118
	mov	edi, ETH_DRV_LIST
125
	cld
119
 
Line 126... Line 120...
126
	repne	scasd			  ; See if device is already in the list
120
	repne	scasd			  ; See if device is already in the list
127
	jz	.error
121
	jz	.error
Line 165... Line 159...
165
;  OUT: eax: -1 on error
159
;  OUT: eax: -1 on error
166
;
160
;
167
;--------------------------------
161
;--------------------------------
Line 168... Line 162...
168
 
162
 
169
align 4
163
align 4
Line 170... Line 164...
170
ETH_Remove_Device:
164
ETH_remove_device:
171
 
165
 
Line 172... Line 166...
172
	cmp	[ETH_RUNNING], 0
166
	cmp	[ETH_RUNNING], 0
Line 210... Line 204...
210
;  OUT: /
204
;  OUT: /
211
;
205
;
212
;-------------------------------------------------------------
206
;-------------------------------------------------------------
Line 213... Line 207...
213
 
207
 
214
align 4
208
align 4
215
ETH_Receiver:
209
ETH_receiver:
Line -... Line 210...
-
 
210
	DEBUGF	1,"ETH_Receiver: "
-
 
211
 
216
	DEBUGF	1,"ETH_Receiver \n"
212
	push	ebx
-
 
213
	mov	esi, esp
-
 
214
	add_to_queue ETH_IN_QUEUE, ETH_QUEUE_SIZE, eth_queue_entry.size, .fail
-
 
215
	DEBUGF	1,"Queued packet successfully\n"
Line 217... Line 216...
217
 
216
	add	esp, 4*3
-
 
217
	ret
-
 
218
 
-
 
219
  .fail:
-
 
220
	DEBUGF	1,"ETH_IN_QUEUE is full!\n"
218
	add_to_queue ETH_IN_QUEUE, ETH_QUEUE_SIZE, .gohome
221
	add	esp, 4
Line 236... Line 239...
236
;-------------------------------------------------------------
239
;-------------------------------------------------------------
Line 237... Line 240...
237
 
240
 
238
align 4
241
align 4
Line 239... Line 242...
239
ETH_handler:
242
ETH_handler:
-
 
243
 
-
 
244
	get_from_queue ETH_IN_QUEUE, ETH_QUEUE_SIZE, eth_queue_entry.size, .gohome
-
 
245
 
-
 
246
	push	ETH_handler
-
 
247
 
-
 
248
	lodsd
-
 
249
	mov	ebx, eax
-
 
250
	lodsd
-
 
251
	mov	ecx, eax
-
 
252
	lodsd
-
 
253
	xchg	eax, ecx
Line 240... Line 254...
240
 
254
	push	ecx
241
	get_from_queue ETH_IN_QUEUE, ETH_QUEUE_SIZE, .gohome
255
	push	eax
242
 
256
 
243
	DEBUGF	1,"ETH_Handler - size: %u\n", ecx
257
	DEBUGF	1,"ETH_Handler - size: %u\n", ecx
Line 260... Line 274...
260
	DEBUGF	1,"Dumping packet\n"
274
	DEBUGF	1,"Dumping packet\n"
261
	call	kernel_free
275
	call	kernel_free
262
	add	esp, 4
276
	add	esp, 4
Line 263... Line 277...
263
 
277
 
264
  .gohome:
278
  .gohome:
Line 265... Line 279...
265
	ret				; return 1. to get more from queue / 2. to caller
279
	ret				; return to get more from queue / to caller
266
 
280
 
267
 
281
 
268
 
282
 
269
;-----------------------------------------------------------------
283
;-----------------------------------------------------------------
270
;
284
;
271
; ETH_Sender:
285
; ETH_sender:
272
;
286
;
Line 278... Line 292...
278
;  OUT: /
292
;  OUT: /
279
;
293
;
280
;-----------------------------------------------------------------
294
;-----------------------------------------------------------------
Line 281... Line 295...
281
 
295
 
282
align 4
296
align 4
283
ETH_Sender:
297
ETH_sender:
Line -... Line 298...
-
 
298
	DEBUGF	1,"ETH_Sender: queuing for device: %x, %u bytes\n", [esp], [esp + 4]
-
 
299
 
284
	DEBUGF	1,"ETH_Sender \n"
300
	push	ebx
-
 
301
	mov	esi, esp
-
 
302
	add_to_queue ETH_OUT_QUEUE, ETH_QUEUE_SIZE, eth_queue_entry.size, .fail
-
 
303
	DEBUGF	1,"Queued packet successfully\n"
Line 285... Line 304...
285
 
304
	add	esp, 3*4
-
 
305
	ret
-
 
306
 
-
 
307
  .fail:
-
 
308
	DEBUGF	1,"ETH_OUT_QUEUE is full!\n"
286
	add_to_queue ETH_OUT_QUEUE, ETH_QUEUE_SIZE, .gohome
309
	add	esp, 4
Line -... Line 310...
-
 
310
	call	kernel_free
-
 
311
	add	esp, 4
-
 
312
	ret
-
 
313
 
-
 
314
 
-
 
315
 
-
 
316
;-----------------------------------------------------------------
-
 
317
;
-
 
318
; ETH_send_queued:
-
 
319
;
287
 
320
;  IN:  /
288
  .gohome:
321
;  OUT: /
Line 289... Line 322...
289
	ret
322
;
-
 
323
;-----------------------------------------------------------------
-
 
324
 
-
 
325
align 4
-
 
326
ETH_send_queued:
-
 
327
 
-
 
328
	get_from_queue ETH_OUT_QUEUE, ETH_QUEUE_SIZE, eth_queue_entry.size, .gohome
-
 
329
 
-
 
330
	push	ETH_send_queued
-
 
331
 
-
 
332
	lodsd
-
 
333
	mov	ebx, eax
-
 
334
 
Line 290... Line 335...
290
 
335
	sub	esp, 8
291
 
336
	mov	edi, esp
292
align 4
337
	movsd
Line 293... Line -...
293
ETH_send_queued:
-
 
294
 
-
 
295
	get_from_queue ETH_OUT_QUEUE, ETH_QUEUE_SIZE, .gohome
338
	movsd
Line 296... Line 339...
296
 
339
 
297
	call	ETH_struc2dev		 ; convert struct ptr to device num (this way we know if driver is still mounted)
340
	DEBUGF	1,"dequeued packet for device %x\n", ebx
298
	cmp	edi, -1
341
 
299
	je	.fail
342
	call	ETH_struc2dev			; convert struct ptr to device num (this way we know if driver is still mounted)
-
 
343
	cmp	edi, -1
300
 
344
	je	.fail
301
	DEBUGF 1,"ETH_Sender - device: %u\n", edi
345
 
Line -... Line 346...
-
 
346
	jmp	[ebx+ETH_DEVICE.transmit]	; we will return to get_from_queue macro after transmitting packet
302
 
347
 
303
	jmp	[ebx+ETH_DEVICE.transmit]
348
     .fail:
304
 
349
	call	kernel_free
305
     .fail:
350
	add	esp, 4 ; pop (balance stack)
306
	call	kernel_free
351
	DEBUGF 1,"ETH_Sender - fail\n"
Line 360... Line 405...
360
;      esi points to procedure wich needs to be called to send packet
405
;      esi points to procedure wich needs to be called to send packet
361
;
406
;
362
;---------------------------------------------------------------------------
407
;---------------------------------------------------------------------------
Line 363... Line 408...
363
 
408
 
364
align 4
409
align 4
Line 365... Line 410...
365
ETH_create_Packet:
410
ETH_create_packet:
Line 366... Line 411...
366
 
411
 
367
	DEBUGF 1,"Creating Ethernet Packet (size=%u): \n", ecx
412
	DEBUGF 1,"Creating Ethernet Packet (size=%u): \n", ecx
Line 392... Line 437...
392
	stosw
437
	stosw
Line 393... Line 438...
393
 
438
 
394
	lea	eax, [edi - ETH_FRAME.Data]  ; Set eax to buffer start
439
	lea	eax, [edi - ETH_FRAME.Data]  ; Set eax to buffer start
395
	mov	edx, ecx		     ; Set ebx to complete buffer size
440
	mov	edx, ecx		     ; Set ebx to complete buffer size
396
	pop	ecx
441
	pop	ecx
Line 397... Line 442...
397
	mov	esi, ETH_Sender
442
	mov	esi, ETH_sender
398
 
443
 
Line 399... Line 444...
399
	xor	ebx, ebx			;;;; TODO: Fixme
444
	xor	ebx, ebx			;;;; TODO: Fixme