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 |