Rev 1254 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1254 | Rev 1257 | ||
---|---|---|---|
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: 1254 $ |
17 | $Revision: 1257 $ |
18 | 18 | ||
Line 19... | Line 19... | ||
19 | MAX_ETH_DEVICES equ MAX_NET_DEVICES |
19 | MAX_ETH_DEVICES equ MAX_NET_DEVICES |
Line 59... | Line 59... | ||
59 | ETH_IN_QUEUE rd 3*ETH_QUEUE_SIZE+3 |
59 | ETH_IN_QUEUE rd 3*ETH_QUEUE_SIZE+3 |
60 | ETH_OUT_QUEUE rd 3*ETH_QUEUE_SIZE+3 |
60 | ETH_OUT_QUEUE rd 3*ETH_QUEUE_SIZE+3 |
61 | endg |
61 | endg |
Line 62... | Line 62... | ||
62 | 62 | ||
63 | 63 | ||
64 | ;----------------------------------------------- |
64 | ;----------------------------------------------------------------- |
65 | ; |
65 | ; |
66 | ; ETH_init |
66 | ; ETH_init |
67 | ; |
67 | ; |
68 | ; This function resets all ethernet variables |
68 | ; This function resets all ethernet variables |
69 | ; |
69 | ; |
70 | ; IN: / |
70 | ; IN: / |
71 | ; OUT: / |
71 | ; OUT: / |
72 | ; |
- | |
73 | ;----------------------------------------------- |
72 | ; |
74 | 73 | ;----------------------------------------------------------------- |
|
Line 75... | Line 74... | ||
75 | align 4 |
74 | align 4 |
76 | ETH_init: |
75 | ETH_init: |
Line 84... | Line 83... | ||
84 | init_queue ETH_OUT_QUEUE |
83 | init_queue ETH_OUT_QUEUE |
Line 85... | Line 84... | ||
85 | 84 | ||
Line 86... | Line 85... | ||
86 | ret |
85 | ret |
87 | 86 | ||
88 | 87 | ||
89 | ;--------------------------------------------------------- |
88 | ;----------------------------------------------------------------- |
90 | ; |
89 | ; |
91 | ; ETH_Add_Device: |
90 | ; ETH_Add_Device: |
92 | ; |
91 | ; |
93 | ; This function is called by ethernet drivers, |
92 | ; This function is called by ethernet drivers, |
94 | ; to register each running ethernet device to the kernel |
93 | ; to register each running ethernet device to the kernel |
95 | ; |
94 | ; |
96 | ; IN: Pointer to device structure in ebx |
95 | ; IN: Pointer to device structure in ebx |
97 | ; OUT: Device num in eax, -1 on error |
- | |
98 | ; |
96 | ; OUT: Device num in eax, -1 on error |
99 | ;--------------------------------------------------------- |
97 | ; |
Line 100... | Line 98... | ||
100 | 98 | ;----------------------------------------------------------------- |
|
Line 140... | Line 138... | ||
140 | ret |
138 | ret |
Line 141... | Line 139... | ||
141 | 139 | ||
142 | .error: |
140 | .error: |
143 | or eax, -1 |
141 | or eax, -1 |
144 | DEBUGF 1,"- fail\n" |
- | |
145 | 142 | DEBUGF 1,"- fail\n" |
|
Line 146... | Line 143... | ||
146 | ret |
143 | ret |
147 | 144 | ||
148 | 145 | ||
149 | 146 | ||
150 | 147 | ||
151 | ;-------------------------------- |
148 | ;----------------------------------------------------------------- |
152 | ; |
149 | ; |
153 | ; ETH_Remove_Device: |
150 | ; ETH_Remove_Device: |
154 | ; |
151 | ; |
155 | ; This function is called by ethernet drivers, |
152 | ; This function is called by ethernet drivers, |
156 | ; to unregister ethernet devices from the kernel |
153 | ; to unregister ethernet devices from the kernel |
157 | ; |
- | |
158 | ; IN: Pointer to device structure in ebx |
154 | ; |
159 | ; OUT: eax: -1 on error |
155 | ; IN: Pointer to device structure in ebx |
Line 160... | Line 156... | ||
160 | ; |
156 | ; OUT: eax: -1 on error |
161 | ;-------------------------------- |
157 | ; |
Line 181... | Line 177... | ||
181 | 177 | ||
182 | mov dword [ETH_IN_QUEUE], ETH_QUEUE_SIZE |
178 | mov dword [ETH_IN_QUEUE], ETH_QUEUE_SIZE |
Line 183... | Line 179... | ||
183 | mov dword [ETH_OUT_QUEUE], ETH_QUEUE_SIZE |
179 | mov dword [ETH_OUT_QUEUE], ETH_QUEUE_SIZE |
184 | - | ||
185 | .notlast: |
180 | |
Line 186... | Line 181... | ||
186 | 181 | .notlast: |
|
187 | ret |
182 | ret |
188 | - | ||
189 | .error: |
183 | |
Line 190... | Line 184... | ||
190 | or eax, -1 |
184 | .error: |
191 | 185 | or eax, -1 |
|
192 | ret |
186 | ret |
193 | 187 | ||
194 | 188 | ||
195 | 189 | ||
196 | ;------------------------------------------------------------- |
190 | ;----------------------------------------------------------------- |
- | 191 | ; |
|
- | 192 | ; ETH_Receiver: |
|
197 | ; |
193 | ; |
198 | ; ETH_Receiver: |
194 | ; This function is called by ethernet drivers, |
199 | ; |
195 | ; It pushes the received ethernet packets onto the eth_in_queue |
200 | ; This function is called by ethernet drivers, |
196 | ; |
201 | ; It pushes the received ethernet packets onto the eth_in_queue |
- | |
202 | ; |
197 | ; IN: [esp] = Pointer to buffer |
203 | ; IN: Pointer to buffer in [esp], size of buffer in [esp-4], pointer to eth_device in ebx |
198 | ; [esp-4] = size of buffer |
204 | ; OUT: / |
- | |
Line -... | Line 199... | ||
- | 199 | ; ebx = pointer to eth_device |
|
205 | ; |
200 | ; OUT: / |
206 | ;------------------------------------------------------------- |
201 | ; |
207 | 202 | ;----------------------------------------------------------------- |
|
208 | align 4 |
203 | align 4 |
209 | ETH_receiver: |
204 | ETH_receiver: |
- | 205 | ||
210 | DEBUGF 1,"ETH_Receiver: " |
206 | DEBUGF 1,"ETH_Receiver: " |
Line 211... | Line 207... | ||
211 | 207 | push ebx |
|
212 | push ebx |
208 | mov esi, esp |
213 | mov esi, esp |
209 | add_to_queue ETH_IN_QUEUE, ETH_QUEUE_SIZE, eth_queue_entry.size, .fail |
214 | add_to_queue ETH_IN_QUEUE, ETH_QUEUE_SIZE, eth_queue_entry.size, .fail |
210 | DEBUGF 1,"Queued packet successfully\n" |
215 | DEBUGF 1,"Queued packet successfully\n" |
211 | add esp, 4*3 |
216 | add esp, 4*3 |
- | |
217 | ret |
- | |
Line -... | Line 212... | ||
- | 212 | ||
Line 218... | Line 213... | ||
218 | 213 | ret |
|
219 | .fail: |
214 | |
220 | DEBUGF 1,"ETH_IN_QUEUE is full!\n" |
215 | .fail: |
221 | add esp, 4 |
216 | DEBUGF 1,"ETH_IN_QUEUE is full!\n" |
222 | call kernel_free |
217 | add esp, 4 |
223 | add esp, 4 |
218 | call kernel_free |
224 | ret |
219 | add esp, 4 |
225 | 220 | ||
226 | 221 | ret |
|
227 | 222 | ||
228 | - | ||
229 | 223 | ||
230 | ;------------------------------------------------------------- |
224 | |
Line 231... | Line 225... | ||
231 | ; |
225 | ;----------------------------------------------------------------- |
Line 290... | Line 284... | ||
290 | ; size of buffer in [esp+4] |
284 | ; size of buffer in [esp+4] |
291 | ; pointer to device struct in ebx |
285 | ; pointer to device struct in ebx |
292 | ; OUT: / |
286 | ; OUT: / |
293 | ; |
287 | ; |
294 | ;----------------------------------------------------------------- |
288 | ;----------------------------------------------------------------- |
295 | - | ||
296 | align 4 |
289 | align 4 |
297 | ETH_sender: |
290 | ETH_sender: |
- | 291 | ||
298 | DEBUGF 1,"ETH_Sender: queuing for device: %x, %u bytes\n", [esp], [esp + 4] |
292 | DEBUGF 1,"ETH_Sender: queuing for device: %x, %u bytes\n", [esp], [esp + 4] |
Line 299... | Line 293... | ||
299 | 293 | ||
300 | push ebx |
294 | push ebx |
301 | mov esi, esp |
295 | mov esi, esp |
302 | add_to_queue ETH_OUT_QUEUE, ETH_QUEUE_SIZE, eth_queue_entry.size, .fail |
296 | add_to_queue ETH_OUT_QUEUE, ETH_QUEUE_SIZE, eth_queue_entry.size, .fail |
303 | DEBUGF 1,"Queued packet successfully\n" |
297 | DEBUGF 1,"Queued packet successfully\n" |
- | 298 | add esp, 3*4 |
|
304 | add esp, 3*4 |
299 | |
Line 305... | Line 300... | ||
305 | ret |
300 | ret |
306 | 301 | ||
307 | .fail: |
302 | .fail: |
308 | DEBUGF 1,"ETH_OUT_QUEUE is full!\n" |
303 | DEBUGF 1,"ETH_OUT_QUEUE is full!\n" |
309 | add esp, 4 |
304 | add esp, 4 |
- | 305 | call kernel_free |
|
310 | call kernel_free |
306 | add esp, 4 |
Line 311... | Line 307... | ||
311 | add esp, 4 |
307 | |
Line 319... | Line 315... | ||
319 | ; |
315 | ; |
320 | ; IN: / |
316 | ; IN: / |
321 | ; OUT: / |
317 | ; OUT: / |
322 | ; |
318 | ; |
323 | ;----------------------------------------------------------------- |
319 | ;----------------------------------------------------------------- |
324 | - | ||
325 | align 4 |
320 | align 4 |
326 | ETH_send_queued: |
321 | ETH_send_queued: |
Line 327... | Line 322... | ||
327 | 322 | ||
Line 342... | Line 337... | ||
342 | 337 | ||
343 | .gohome: |
338 | .gohome: |
Line 344... | Line 339... | ||
344 | ret |
339 | ret |
345 | 340 | ||
346 | 341 | ||
347 | ;--------------------------------------------------------------------------- |
342 | ;----------------------------------------------------------------- |
348 | ; |
343 | ; |
349 | ; ETH_struc2dev |
344 | ; ETH_struc2dev |
350 | ; |
345 | ; |
351 | ; IN: pointer to device struct in ebx |
346 | ; IN: pointer to device struct in ebx |
352 | ; |
347 | ; |
353 | ; OUT: edi is -1 on error, device number otherwise |
- | |
354 | ; |
348 | ; OUT: edi is -1 on error, device number otherwise |
355 | ;--------------------------------------------------------------------------- |
349 | ; |
356 | 350 | ;----------------------------------------------------------------- |
|
Line 357... | Line 351... | ||
357 | align 4 |
351 | align 4 |
Line 375... | Line 369... | ||
375 | pop ecx eax |
369 | pop ecx eax |
Line 376... | Line 370... | ||
376 | 370 | ||
Line 377... | Line 371... | ||
377 | ret |
371 | ret |
378 | 372 | ||
379 | 373 | ||
380 | ;--------------------------------------------------------------------------- |
374 | ;----------------------------------------------------------------- |
381 | ; |
375 | ; |
382 | ; ETH_create_Packet |
376 | ; ETH_create_packet |
383 | ; |
377 | ; |
384 | ; IN: pointer to source mac in eax |
378 | ; IN: pointer to source mac in eax |
Line 392... | Line 386... | ||
392 | ; ebx is pointer to device structure |
386 | ; ebx is pointer to device structure |
393 | ; ecx is unchanged (packet size of embedded data) |
387 | ; ecx is unchanged (packet size of embedded data) |
394 | ; edx is size of complete buffer |
388 | ; edx is size of complete buffer |
395 | ; esi points to procedure wich needs to be called to send packet |
389 | ; esi points to procedure wich needs to be called to send packet |
396 | ; |
390 | ; |
397 | ;--------------------------------------------------------------------------- |
391 | ;----------------------------------------------------------------- |
398 | - | ||
399 | align 4 |
392 | align 4 |
400 | ETH_create_packet: |
393 | ETH_create_packet: |
Line 401... | Line 394... | ||
401 | 394 | ||
Line 453... | Line 446... | ||
453 | or edi, -1 |
446 | or edi, -1 |
454 | ret |
447 | ret |
Line 455... | Line 448... | ||
455 | 448 | ||
456 | 449 | ||
457 | 450 | ||
458 | ;--------------------------------------------------------------------------- |
451 | ;----------------------------------------------------------------- |
459 | ; |
452 | ; |
460 | ; ETH_API |
453 | ; ETH_API |
Line 465... | Line 458... | ||
465 | ; device number in bh |
458 | ; device number in bh |
466 | ; ecx, edx, .. depends on subfunction |
459 | ; ecx, edx, .. depends on subfunction |
467 | ; |
460 | ; |
468 | ; OUT: |
461 | ; OUT: |
469 | ; |
462 | ; |
470 | ;--------------------------------------------------------------------------- |
463 | ;----------------------------------------------------------------- |
471 | - | ||
472 | align 4 |
464 | align 4 |
473 | ETH_API: |
465 | ETH_API: |
Line 474... | Line 466... | ||
474 | 466 | ||
475 | movzx eax, bh |
467 | movzx eax, bh |