Subversion Repositories Kolibri OS

Rev

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

Rev 1206 Rev 1249
Line 10... Line 10...
10
;;          GNU GENERAL PUBLIC LICENSE                          ;;
10
;;          GNU GENERAL PUBLIC LICENSE                          ;;
11
;;             Version 2, June 1991                             ;;
11
;;             Version 2, June 1991                             ;;
12
;;                                                              ;;
12
;;                                                              ;;
13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
13
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 14... Line 14...
14
 
14
 
Line 15... Line 15...
15
$Revision: 1206 $
15
$Revision: 1249 $
16
 
16
 
17
struct	queue
17
struct	queue
18
	.size		dd ?
18
	.size		dd ?	; number of queued packets in thsi queue
19
	.w_ptr		dd ?
19
	.w_ptr		dd ?	; current writing pointer in queue
20
	.r_ptr		dd ?
20
	.r_ptr		dd ?	; current reading pointer
Line 21... Line 21...
21
	.data:
21
	.data:
22
ends
22
ends
23
 
23
 
24
struct	queue_entry
24
struct	eth_queue_entry
25
	.owner		dd ?
25
	.owner		dd ?
26
	.data_ptr	dd ?
26
	.data_ptr	dd ?
Line -... Line 27...
-
 
27
	.data_size	dd ?
-
 
28
	.size:
-
 
29
ends
-
 
30
 
-
 
31
struct	tcp_in_queue_entry
-
 
32
	.data_ptr	dd ?
Line 27... Line 33...
27
	.data_size	dd ?
33
	.data_size	dd ?
-
 
34
	.offset 	dd ?
-
 
35
	.size:
-
 
36
ends
-
 
37
 
-
 
38
struct	tcp_out_queue_entry
-
 
39
	.data_ptr	dd ?
-
 
40
	.data_size	dd ?
-
 
41
	.ttl		dd ?
-
 
42
	.retries	dd ?
Line 28... Line 43...
28
	.size:
43
	.owner		dd ?
-
 
44
	.sendproc	dd ?
-
 
45
	.ack_num	dd ?
29
ends
46
	.size:
-
 
47
ends
-
 
48
 
Line 30... Line 49...
30
 
49
struct	socket_queue_entry
Line 31... Line 50...
31
 
50
	.data_ptr	dd ?
-
 
51
	.data_size	dd ?
Line 32... Line 52...
32
macro add_to_queue ptr, size, returnaddr {
52
	.offset 	dd ?
Line -... Line 53...
-
 
53
	.size:
33
 
54
ends
34
	cmp	dword [ptr + queue.size], size	; Check if queue isnt full
-
 
35
	jge	.fail
55
 
36
 
-
 
37
	DEBUGF	1,"Queuing packet for device %x\n",ebx
-
 
38
 
-
 
Line 39... Line 56...
39
	inc	dword [ptr + queue.size]
56
macro add_to_queue ptr, size, entry_size, failaddr {
-
 
57
 
40
 
58
	cmp	[ptr + queue.size], size  ; Check if queue isnt full
Line 41... Line 59...
41
	mov	edi, dword [ptr + queue.w_ptr]	; Current write pointer (FIFO!)
59
	jge	failaddr
Line 42... Line 60...
42
 
60
 
43
	mov	eax, ebx
61
	inc	[ptr + queue.size]
44
	stosd
-
 
45
	pop	eax
-
 
46
	stosd
-
 
47
	pop	eax
-
 
48
	stosd
-
 
49
 
-
 
50
	cmp	edi, size*queue_entry.size+ptr+queue.data     ; entry size
-
 
51
	jl	.no_wrap
-
 
Line 52... Line 62...
52
 
62
 
Line 53... Line -...
53
	sub	edi, size*queue_entry.size
-
 
Line 54... Line -...
54
 
-
 
55
  .no_wrap:
63
	mov	edi, [ptr + queue.w_ptr]  ; Current write pointer (FIFO!)
56
	mov	dword [ptr + queue.w_ptr], edi
-
 
Line 57... Line 64...
57
	jmp	returnaddr
64
	mov	ecx, entry_size/4		; Write the queue entry
-
 
65
	rep	movsd				;
Line 58... Line 66...
58
 
66
 
59
  .fail:
-
 
60
	DEBUGF	1,"queuing failed\n"
-
 
Line 61... Line 67...
61
 
67
	lea	ecx, [size*entry_size+ptr+queue.data]
62
	call	kernel_free
-
 
63
	add	esp, 4
-
 
64
	ret
-
 
65
 
-
 
66
}
-
 
67
 
-
 
68
 
68
	cmp	edi, ecx     ; entry size
69
macro get_from_queue ptr, size, returnaddr {
-
 
Line 70... Line 69...
70
 
69
	jl	.no_wrap
Line 71... Line 70...
71
  .start_of_code:
70
 
-
 
71
	sub	edi, size*entry_size
72
	cmp	dword [ptr + queue.size], 0		; any packets queued?
72
 
Line 73... Line 73...
73
	je	returnaddr
73
  .no_wrap:
Line 74... Line 74...
74
 
74
	mov	[ptr + queue.w_ptr], edi
75
	DEBUGF	1,"Dequeuing packet"
75
 
Line -... Line 76...
-
 
76
}
-
 
77
 
76
 
78
 
Line -... Line 79...
-
 
79
 
-
 
80
macro get_from_queue ptr, size, entry_size,  failaddr {
-
 
81
 
-
 
82
	cmp	[ptr + queue.size], 0		  ; any packets queued?
-
 
83
	je	failaddr
-
 
84
 
-
 
85
	dec	[ptr + queue.size]
77
	dec	dword [ptr + queue.size]
86