1 2007-06-12 Andrew Lunn <andrew.lunn@ascom.ch>
3 * src/if_i82559.c (eth_dsr): Fixed the previous change which broken
4 linkage under some conditions.
6 2006-11-23 David Fernandez <dfernandez@cct.co.uk>
8 * src/if_i82559.c Modifications to remove compile warnings.
10 2005-01-22 Andrew Lunn <andrew.lunn@ascom.ch>
12 * src/if_i82559.c Added string.h to remove compiler warnings.
14 2004-08-12 Jani Monoses <jani@iv.ro>
16 * src/if_i82559.c: Fix builing with lwip.
18 2004-01-15 Jeff Daly <jeffrey.daly@intel.com>
20 * src/if_i82559.c: support for large EEPROMs
22 2004-01-05 Gary Thomas <gary@mlbassoc.com>
24 * src/if_i82559.c: Names of FLASH config types changed.
26 2003-02-27 Mark Salter <msalter@redhat.com>
28 * src/if_i82559.c (eth_set_mac_address): Correct writing
29 of wrong address to EEPROM.
31 2003-02-22 Mark Salter <msalter@redhat.com>
33 * src/if_i82559.c: Fix endian issues with EEPROM writing.
34 Use read-modify-write to set EEPROM mac address. Support
35 writing to EEPROM the mac address obtained from
36 CYGHWR_DEVS_ETH_INTEL_I82559_GET_ESA.
38 2003-02-12 Mark Salter <msalter@redhat.com>
40 * src/if_i82559.c: Remove restriction preventing combination of
41 *_GET_ESA and *_HAS_EEPROM.
43 2003-01-03 Gary Thomas <gary@mlbassoc.com>
46 * cdl/intel_i82559_eth_drivers.cdl: Allow finer control over
47 debug (chatter) by making control booldata.
49 2002-12-17 Mark Salter <msalter@redhat.com>
51 * src/if_i82559.c (CYGHWR_DEVS_ETH_INTEL_I82559_ENDIAN_NEUTRAL_IO): New
52 flag to support systems where PCI IO operations are not affected by
55 2002-10-06 Andrew Lunn <andrew.lunn@ascom.ch>
57 * src/if_i82559.c (pci_init_find_82559s): Changed scope of
58 max_interrupt_handle since its needed in other places.
59 * src/if_i82559.c (i82559_stop): Corrected wrong name of variable
60 in a diag_printf function.
62 2002-07-24 Gary Thomas <gary@mlbassoc.com>
64 * src/if_i82559.c (pci_init_find_82559s):
65 Allow platform to define CYGHWR_DEVS_ETH_INTEL_I82559_USE_MEMORY
66 which forces use of memory instead of I/O space for device access.
68 2002-06-14 Gary Thomas <gary@chez-thomas.org>
71 Need to include <pkgconf/io_eth_drivers.h> for proper configuration
72 of stand-alone (polled) vs. system (interrupt driven) mode.
74 2002-04-09 Hugo Tyson <hmt@redhat.com>
76 * src/if_i82559.c (i82559_stop): Free up any pending transmissions
77 to prevent MBUF store leaks if the calling thread - the one that's
78 shutting down the interface - priority ends up higher than (or
79 same as) the network service threads.
81 2002-03-26 Jonathan Larmour <jlarmour@redhat.com>
83 * src/if_i82559.c (wait_for_cmd_done): Don't assert if RUC_ADDR_LOAD
84 command doesn't clear - on some chips it never does.
86 2002-03-18 Hugo Tyson <hmt@redhat.com>
88 * src/if_i82559.c (pci_init_find_82559s): Move allocation of
89 statistics pointer for each device to here, out of
90 i82559_start(). It used to leak PCI window store every time the
91 interface cycled down/up. [Case 107110]
93 2002-02-25 Mark Salter <msalter@redhat.com>
95 * src/if_i82559.c: Don't call PacketRxReady in standalone configuration
96 unless ready to accept a packet. Limit packet delivery to one packet at
97 a time in standalone configuration.
99 2002-02-20 Hugo Tyson <hmt@redhat.com>
101 * include/i82559_info.h: New fields to record/control multicast
102 all reception, oversized packet reception and promiscuous mode
105 * src/if_i82559.c: Initial support for multicast address reception
107 (i82559_restart): New routine to restart the device after fiddling
108 with its setup - a tail recursion from i82559_start().
109 (i82559_configure): More generic flags passed in and handled.
110 (i82559_set_multicast): Routine to pass a set of addresses into
111 the device; it works out the bitmap et al for us!
112 (i82559_ioctl): Handle new case arms ETH_DRV_SET_MC_LIST and
113 ETH_DRV_SET_MC_ALL if defined. Reset and restart the device,
114 diddling its status between.
116 2002-02-19 Mark Salter <msalter@redhat.com>
118 * src/if_i82559.c (pci_init_find_82559s): Don't use IRQ support if
119 CYGPKG_IO_ETH_DRIVERS_STAND_ALONE.
121 2002-01-28 Mark Salter <msalter@redhat.com>
123 * src/if_i82559.c (pci_init_find_82559s): Removed CYG_ASSERT which
124 assumed system PCI window exists.
126 2002-01-10 Jonathan Larmour <jlarmour@redhat.com>
128 * src/if_i82559.c (find_82559s_match_func): Add some more compatible PCI
131 2002-01-03 Mark Salter <msalter@redhat.com>
133 * src/if_i82559.c (pci_init_find_82559s): Remove check that
134 assumes driver owns entire PCI window.
136 * cdl/intel_i82559_eth_drivers.cdl: Add
137 CYGNUM_DEVS_ETH_INTEL_I82559_MAX_TX_DESCRIPTORS and
138 CYGNUM_DEVS_ETH_INTEL_I82559_MAX_RX_DESCRIPTORS.
140 2001-11-19 Hugo Tyson <hmt@redhat.com>
141 2001-11-19 Anssi Pulkkinen <Anssi.Pulkkinen@ascom.ch>
143 * src/if_i82559.c (TxMachine): The test to see if there is a new
144 tx to start must also say "go" if the tx queue is full. Normally,
145 if the txqueue is full, a tx will be occurring at all times - so
146 one will complete soon, so the tx queue full flag will soon be
147 cleared, and this condition will recover. I suspect a subtle race
148 which effectively means a new tx is queued and fills the queue in
149 between two tx's, so no TxDone() follows, causes the hang which we
150 get without this extra test under high load. [CASE 106686]
152 2001-09-20 Gary Thomas <gthomas@redhat.com>
154 * src/if_i82559.c: Add declaration of 'i82559_stop' to quiet warning.
156 2001-09-13 Hugo Tyson <hmt@redhat.com>
158 * cdl/intel_i82559_eth_drivers.cdl:
160 Remove the tickle thread from this driver. The functionality is
161 now in the network timeout functionality which handles the
162 "deliver" calls. So it's only called if the net is quiet.
164 2001-09-12 Hugo Tyson <hmt@redhat.com>
166 * src/if_i82559.c (TxDone): Defensive programming; zero the Tx key
167 in the global data before making the callback. This change
168 appeared useful in our forebear, the EBSA-specific driver.
170 2001-08-29 Hugo Tyson <hmt@redhat.com>
172 * cdl/intel_i82559_eth_drivers.cdl: New CDL options called
173 CYGPKG_DEVS_ETH_INTEL_I82559_TICKLE_THREAD, .._PRIORITY and
174 .._DELAY to control the thread. By default this is all disabled
175 because it is not needed for a real network application which
176 itself proactively tries to use the net - it's only needed when
177 the app is totally passive, so the driver otherwise does not get
180 * src/if_i82559.c (starti82559ticklethread): New code to start a
181 thread (!) to catch lost interrupts and thus restart jammed
182 hardware. It's only possible if KERNEL and NET - RedBoot is
183 unaffected, and it's not needed for RedBoot 'cos RedBoot polls.
184 (TxMachine): An assert about the CU idle status sometimes fired;
185 made the code more conservative wrt timing here.
186 (comments): more documentation on the possible external configury
187 by .inl file, described the two TIMEOUT macros that can be set,
188 and indeed must be to use the tickling thread meaningfully.
190 2001-08-22 Gary Thomas <gthomas@redhat.com>
193 printf() is no longer a part of RedBoot. Thus all programs
194 must use diag_printf() and related functions instead.
196 2001-06-22 Jesper Skov <jskov@redhat.com>
198 * src/if_i82559.c (i82559_init): Handle EEPROMS without CRC.
200 2001-05-16 Jonathan Larmour <jlarmour@redhat.com>
202 * src/if_i82559.c (udelay): Use virtual vector rather than assuming
203 hal_delay_us() exists.
205 2001-04-09 Hugo Tyson <hmt@redhat.com>
207 * src/if_i82559.c (pciwindow_mem_alloc): If asked, by
208 CYGHWR_DEVS_ETH_INTEL_I82559_PCIMEM_DISCONTIGUOUS, check for
209 breaks in the physical address of PCI window memory, and discard
210 any block with a break in it, then redo the alloc. This is for
211 targets where smaller SDRAM chips are fitted than the address
212 width, so they end up with gaps in (physical) memory.
214 2001-04-09 Hugo Tyson <hmt@redhat.com>
216 * src/if_i82559.c (i82559_init): Support hardware with only one
217 serial EEPROM attached to one device, but multiple devices. This
218 generally involves moving some decisions for eg. programming
219 EEPROM or not, optionally from compiletime to runtime. Improved
220 the diagnostics a bit also, and fixed some bugs.
221 (eth_set_mac_address): now takes an arg to say whether we want to
222 program the EEPROM, or are just setting up the chip.
223 (i82559_ioctl): This is the only place we set that arg to write
224 the EEPROM, startup never tries to write EEPROM from any external
225 source such as configured ESA or RedBoot params.
227 2001-04-09 Hugo Tyson <hmt@redhat.com>
229 * src/if_i82559.c (i82559_start): Warnings fixed; unused vars
230 following previous change.
232 2001-04-09 Hugo Tyson <hmt@redhat.com>
234 * src/if_i82559.c (i82559_start): Do not wait for command
235 completion after the initial DUMPSTATS operation. The code to
236 wait was bogus; it was looking at the structure in the wrong way.
237 In any case, there is no need to wait, the wait_for_cmd_done() in
238 any following activity is good enough.
240 2001-03-28 Hugo Tyson <hmt@redhat.com>
242 * src/if_i82559.c (update_statistics): Fix warning - only declare
243 op_i82559 if we use it - from previous change.
245 2001-03-23 Hugo Tyson <hmt@redhat.com>
247 * src/if_i82559.c (i82559_can_send, i82559_send): Count up and
248 down entries into these routines, and always say "no" to
249 can_send() if we are recursing, ie. within_send != 0. This is a
250 good idea because it limits stack usage. The recursion happens
251 because of the very neccessary polling of rx state within the tx
252 routines - which can deliver packets up into the stack, which can
253 trigger a response tx and so on... Also fixed a harmless bug
254 where, after polling, the p_i82559 current device state pointer
255 pointer to the wrong device, if we polled both devs regardless; it
256 only caused problems with the within_send recursion count.
258 * include/i82559_info.h (I82559): Add within_send field.
260 2001-03-15 Hugo Tyson <hmt@redhat.com>
262 * src/if_i82559.c (i82559_init): Support external macro
263 CYGHWR_DEVS_ETH_INTEL_I82559_GET_ESA(...), which if defined, is
264 used to acquire a MAC address, on the assumption that there is no
265 EEPROM present. CYGHWR_DEVS_ETH_INTEL_I82559_HAS_NO_EEPROM
266 confirms that there is no EEPROM attached to the 82559(s) so we
267 can omit all that code. It's in the negative sense because it's
270 2001-03-13 Hugo Tyson <hmt@redhat.com>
272 * src/if_i82559.c (CYGHWR_DEVS_ETH_INTEL_I82559_DEMUX_ALL): Fully
273 enable "DEMUX_ALL" option; all devices are scanned for
274 activity/wedging/interrupts at every opportunity. Multiple
275 devices on the same interrupts are now supported.
277 2001-03-12 Hugo Tyson <hmt@redhat.com>
279 * src/if_i82559.c (i82559_configure): New routine combines actions
280 of eth_set_promiscuous_mode() and eth_set_config() both of which
281 disappear. Thus the device is always configured correctly from
282 the start. [from a patch from Martin Buck <martin.buck@ascom.ch>
283 via the EBSA285 driver]
284 (eth_dsr): Do not call upper layer unless we are in a networked
285 [non-RedBoot, non-polled] environment. This is necessary because
286 we call our own DSR from foreground to unstick after a lost
288 (find_82559s_match_func): New routine to discover disparate
289 devices on the PCI bus. Used in pci_init_find_82559s().
290 (dump_txcb): Various junk debug functions removed.
292 2001-03-12 Hugo Tyson <hmt@redhat.com>
294 * src/if_i82559.c: Some tidying up, and two main additions to the
295 mechanisms used for managing this nasty entomological device.
296 (i82559_can_send): [amongst other places] if it is defined, use
297 CYGHWR_DEVS_ETH_INTEL_I82559_MISSED_INTERRUPT(p_i82559) to detect
298 that we missed an interrupt - and if so, call the ISR and DSR
299 directly. This is necessary for edge-triggered interrupt
300 controllers being fed by this level-sending device, where an
301 internal event in the device can keep the line low after the code
302 thinks that all events have been handled.
303 (Check82559TxLockupTimeout): This routine runs a timeout (if the
304 HAL provides a pair of watchdog-like macros) which performs a
305 selective reset of the device if it takes too long to transmit.
306 This happens rarely, but when it happens this is the only way out;
307 the tx machine is fixated on one tx and never comes out of it.
310 Sadly these two techniques to escape lockup only work if the
311 driver is called (ie. the stack tries to tx); incoming packets
312 cannot unwedge a device. We might need to add a poll from the
313 stack in future if this causes problems.
315 * include/i82559_info.h (I82559): Added two words for managing tx
316 lockup timeouts since this must be per-device.
318 2001-03-02 Hugo Tyson <hmt@redhat.com>
320 * src/if_i82559.c: Remove "Platform specific - defaults provided"
321 definitions for CYGHWR_INTEL_I82559_PCI_MEM_MAP_BASE/SIZE; all
322 platforms now provide these.
323 Added a little further disclaimer to the comment about LE/BE/GE.
325 2001-03-01 Hugo Tyson <hmt@redhat.com>
327 * src/if_i82559.c: Global change: what was HAL_READ_UINTxx or
328 HAL_WRITE_UINTxx are now READMEMxx or WRITEMEMxx - just
329 convenience macros that do all the volatile casts we want there.
330 Definitions of INL, INW, INB and OUTL, OUTW, OUTB recast in terms
331 of HAL_READ_UINTxx or HAL_WRITE_UINTxx so that they will use
332 proper IO operations on those CISCy mainframes that have a special
335 2001-03-01 Hugo Tyson <hmt@redhat.com>
337 * src/if_i82559.c: Much more configury added, so that I can use it
338 with a new target board. Including, but not limited to:
340 o An essay about addressing, big endian, little endian and GIB
341 endian (sic) and how we treat the various types of access within
342 this module. In other words, a lot of comments.
344 o CYGNUM_DEVS_ETH_INTEL_I82559_SEPARATE_MUX_INTERRUPT to clarify
345 that such an interrupt is SEPARATE from any simplex intrs that are
348 o CYGHWR_DEVS_ETH_INTEL_I82559_DEMUX_ALL for hardware where the
349 the only interrupt is a multiplexed (wire or'd) one. Plus
350 associated macros for direct manipulation of interrupt masks and
353 o Support for external definition from the platform HAL or driver
354 config module of CYGHWR_INTEL_I82559_PCI_MEM_MAP_BASE and SIZE.
355 Also CYGHWR_INTEL_I82559_PCI_VIRT_TO_BUS.
357 o LE definitions of a few macros that were missing.
359 o Separated definitions of structure offsets from BE/LE
360 definitions of consts within the words. Offsets vary with GIB
361 endian, for those CPUs who just flip bits. No change for BE
362 machines, needed for LE machines to work. To enable address-flip
363 within structures, define CYG_ADDRESSING_IS_GIBENDIAN.
365 o Re-org of mux/simplex deliver and isr's for new configuration.
367 o Couple of extra debug printouts.
369 2001-01-26 Jesper Skov <jskov@redhat.com>
371 * src/if_i82559.c: Added FIXME for promiscuous mode.
373 2001-01-25 Jesper Skov <jskov@redhat.com>
375 * src/if_i82559.c: Replace CYGNUM_HAL_INTERRUPT_PCI_IRQ with
376 CYGNUM_DEVS_ETH_INTEL_I82559_MUX_INTERRUPT which platform .inl
377 must provide when appropriate. Changed _deliver functions to match
379 * include/i82559_info.h: Remove debug hacks.
382 * src/if_i82559.c: Moved device descriptors into platform header.
383 Allow individual devices to hardwire ESA. Handle N devices instead
385 * include/i82559_info.h: ESA hardwired flag added.
386 * cdl/intel_i82559_eth_drivers.cdl: Device details moved to
389 * src/if_i82559.c (i82559_start): Poll status after dump command.
391 2001-01-24 Jesper Skov <jskov@redhat.com>
393 * src/if_i82559.c: [changes from yesterday] Some more endian
394 fiddle, and the device coughs out the initial ARP packets.
395 (wait_for_cmd_done): semantics changed to wait for pending CU
397 (i82559_reset): Cleaned up to spec. Init register bases after
399 Fix initialization of hardwired ESA.
400 Correct configuration command.
402 (eth_set_mac_address): Set driver's ESA as well. Proper check for
404 Fix LE structure offsets.
405 (i82559_start): Call new eth_set_config to enable device. Last
407 Remove a few printfs.
409 2001-01-23 Jesper Skov <jskov@redhat.com>
411 * src/if_i82559.c: Debug hackery and some endian issues resolved.
413 2001-01-22 Jesper Skov <jskov@redhat.com>
415 * src/if_i82559.c: Major changes, getting rid of device structures
416 in favor of HAL IO accessor macros. Also added endian conversion
417 macros where required.
418 * include/i82559_info.h: Change type of device structures to char.
420 2001-01-19 Jesper Skov <jskov@redhat.com>
422 * cdl/intel_i82559_eth_drivers.cdl: Hack for just one interface
424 * src/if_i82559.c: Fix IO functions. Handle EEPROM not being
427 * src/if_i82559.c: Use uncached/physical address translation
430 2001-01-15 Jesper Skov <jskov@redhat.com>
432 * src/if_i82559.c: Handle endian differences between controller
433 and CPU. Leave usdelay to HAL. Hack around PCI-base-at-0
435 Increase SK_DELAY (not that it changed anything, but now it's to
436 the spec), hardwire static ESA.
438 2001-01-12 Jesper Skov <jskov@redhat.com>
440 * src/if_i82559.c (pci_init_find_82559s): Check that device has
441 been found before accessing it.
442 (pci_init_find_82559s): Only delay if devices were
443 found. Recognize 82559ER code as well.
445 2001-01-10 Jesper Skov <jskov@redhat.com>
447 * src/if_i82559.c: Minor hacks to get it to build.
448 * include/i82559_info.h: Same.
449 * cdl/intel_i82559_eth_drivers.cdl: Same.
451 2000-12-07 Jesper Skov <jskov@redhat.com>
453 * cdl/intel_i82559_eth_drivers.cdl: Cloned from the EBSA driver.
454 * include/i82559_info.h: Same.
455 * src/if_i82559.c: Same.
457 2000-11-19 Gary Thomas <gthomas@redhat.com>
459 * src/if_ebsa285.c (pci_init_find_82559s): Intel has at least
460 two devices equivalent to the 82559. Support both (0x1229, 0x01030).
462 2000-10-05 Hugo Tyson <hmt@redhat.com>
464 * src/if_ebsa285.c: Deal with device interrupts in a nested
465 fashion - disable/restore is the semantics now, rather than
466 unconditionally unmasking. Also go directly to the 21285 PIC's
467 interrupt control registers to gain atomicity for these. Poll for
468 ready received packets when acknowledging an interrupt in the
469 tranmitting world; a race here could lose an Rx interrupt. Which
470 doesn't matter on a busy system, but in quieter times... there
471 will always be such a race because of the vague way the i82559's
472 status bits reflect how it's yanking the interrupt line; you have
473 to poll until the interrupt is gone before returning else spurious
474 interrupt failures occur. The issue is to close the window as
475 tightly as possible, which this change achieves at a minor cost in
476 performance - because of the time spent polling when not required.
478 2000-09-11 Hugo Tyson <hmt@cygnus.co.uk>
480 * src/if_ebsa285.c (i82559_poll): Only diddle the interface we
481 were asked to. This is more correct in terms of the intent of the
482 API, though it shouldn't really be necessary.
484 2000-09-06 Hugo Tyson <hmt@cygnus.co.uk>
486 * src/if_ebsa285.c (pci_init_find_82559s): Add asserts and an
487 unconditional check that the PCI window as configured matches the
488 address and size of the pci_window region from the MLT. This is
489 here because at present the MLT and CT cannot intercommunicate
490 enough. The separation of the PCI window is needed because
491 otherwise the malloc heap will eat all memory. [This is related
492 to CR 902624-CR, "MLT needs to be configuration aware"]
494 2000-09-01 Hugo Tyson <hmt@cygnus.co.uk>
496 * OVERVIEW: This is part of the change to the network stack to
497 greatly reduce latencies both of (other) DSRs and of thread
498 scheduling. All the work that the network stack *and* individual
499 ether drivers used to do in DSRs (including alarm callbacks and
500 data copies to/from the device memory) is moved into a "fast
501 network thread" instead. It calls a device's "deliver" function
502 to do the work that was previously in the DSR. This is a separate
503 thread so that it can be set higher priority than application
504 threads in order to minimize packet loss (depending on the
505 driver), if required (the application threads presumed to be
506 higher priority in turn than the network thread). A crucial
507 consequence of this is that we are no longer locking against DSRs,
508 so a plain mutex can be used rather than the global scheduler
509 lock, thus simplifying all the splfoo/splx() style functions.
511 * src/if_ebsa285.c: Minor: fix the big assert in i82559_send()
512 which suffered a race condition when called from the fast thread
513 rather than from a DSR. Major: Add a "deliver" entry to the
514 interface record for the "fast thread" implementation of the
515 network internal comms system. Provide a pass-up DSR to the
516 logical ether driver's DSR and appropriate delivery routine(s).
517 i82559_poll() now calls i82559_deliver() rather than the DSR. Add
518 valid data for mux'd DSR to pass on up.
520 2000-09-01 Hugo Tyson <hmt@cygnus.co.uk>
522 * tests/test_net_realtime.h: Tighten up the latency requirements
523 by a factor of 5; it all seems happy, so committed.
525 2000-08-25 Hugo Tyson <hmt@cygnus.co.uk>
527 * src/if_ebsa285.c (i82559_ioctl): A little further diddling; have
528 a bool to say whether the dot3 info is filled in.
530 2000-08-24 Hugo Tyson <hmt@cygnus.co.uk>
532 * cdl/ebsa285_eth_drivers.cdl: Do not export a symbol for the
533 device info file (include/ebsa285_info.h) since nobody needs
534 (portably) to include it now.
536 * src/if_ebsa285.c (i82559_ioctl): Handle new ioctl calls
537 ETH_DRV_GET_IF_STATS_UD and ETH_DRV_GET_IF_STATS to get loads of
538 statistical information out. _UD means update. The nonUD one can
539 be used instead mostly, if we find the performance hit too large.
540 This should allow SNMP (a) to not explode, (b) to get useful info
541 out of other device implementations than this one.
543 * include/ebsa285_info.h: Remove all the macro cruft for feature
544 detecting of lots of individual statistics; we now just have a
545 catch-all struct that SNMP uses, defined in the common ether
548 2000-08-15 Hugo Tyson <hmt@cygnus.co.uk>
550 * src/if_ebsa285.c (PacketRxReady): Put back the check for very
551 small packets into the driver; the layer above checks for that
552 (defensive programming) but only *after* asserting that the size
553 is large enough, to help detect that scenario from other drivers.
554 I believe we only have struct ether_header available if CYGPKG_NET
555 but I could be wrong.
558 2000-08-08 Hugo Tyson <hmt@cygnus.co.uk>
560 * src/if_ebsa285.c (eth_set_promiscuous_mode):
561 - ccs->config_bytes[18]=0x70;
562 + ccs->config_bytes[18]=0x72; // Keep the Padding Enable bit
563 ...otherwise short frame sends don't work in promisc mode.
566 2000-08-07 Gary Thomas <gthomas@redhat.com>
568 * src/if_ebsa285.c (pciwindow_mem_alloc): Take out very noisy debug.
570 2000-08-03 Gary Thomas <gthomas@redhat.com>
572 * src/if_ebsa285.c: Changes for stand-alone mode.
574 * cdl/ebsa285_eth_drivers.cdl: Ethernet driver package hierarchy changed.
575 Add option to control number of interfaces.
577 2000-07-28 Hugo Tyson <hmt@cygnus.co.uk>
579 * src/if_ebsa285.c (PacketRxReady): Do not attempt to forward
580 short packets; eth_drv.c assumes there is at least a header there.
581 (i82559_recv): Also be more careful and ASSERTive about -ve buffer
582 sizes; be more defensive about sglists. [CASE 104206]
584 2000-07-26 Gary Thomas <gthomas@redhat.com>
586 * src/if_ebsa285.c: Update for new eth_drv interfaces.
588 2000-07-18 Hugo Tyson <hmt@cygnus.co.uk>
590 * src/if_ebsa285.c (i82559_poll): Fill in the flesh of this, it
591 just calls ISR and DSR repeatedly.
592 (i82559_start): Look in the device record for promiscuous mode
593 flag; it should be passed though the common layer, but it's not
594 [yet] - this change from Andrew Lunn/ASCOM. Also a fix and delay
595 to the promisc mode code per se.
597 2000-07-17 Hugo Tyson <hmt@cygnus.co.uk>
599 * src/if_ebsa285.c (i82559_poll): New function, just to fill in
600 the interface record; not used.
602 2000-06-27 Hugo Tyson <hmt@cygnus.co.uk>
604 * cdl/ebsa285_eth_drivers.cdl: Add sesquipedalian option
605 CYGDBG_DEVS_ETH_ARM_EBSA285_KEEP_82559_STATISTICS in (now)
606 component CYGDBG_DEVS_ETH_ARM_EBSA285_KEEP_STATISTICS to control
607 keeping (well, harvesting really) the i82559's internal stats.
608 Reputedly, it doesn't service the net whilst this is happening, so
609 it could be viewed a bad thing. Hence the option.
611 * include/ebsa285_info.h: Only describe the I82559_COUNTERS
612 i82559_counters[2]; structs if full stats are to be kept.
614 * src/if_ebsa285.c (update_statistics): Only include this if full
615 stats are to be kept.
617 2000-06-27 Hugo Tyson <hmt@cygnus.co.uk>
619 * src/if_ebsa285.c (ResetRxRing): Re-do the management of the
620 RxRing; have an end-of-list flag (EL) in the last entry, and as
621 you unload filled slots, drag it round after you.
623 2000-06-14 Hugo Tyson <hmt@cygnus.co.uk>
625 * cdl/ebsa285_eth_drivers.cdl: Add option to control statistics
628 * include/ebsa285_info.h: Act on it.
630 2000-06-13 Hugo Tyson <hmt@cygnus.co.uk>
632 * cdl/ebsa285_eth_drivers.cdl: Properly include the new header
633 file and define symbols to allow client code to get at it without
634 knowing the particular device driver name.
636 * include/ebsa285_info.h: New file: export various statistics
637 information about the driver for use by monitoring and
638 network-management systems. This requires exposing the
639 (otherwise) internal structures of the driver.
641 * src/if_ebsa285.c: remove a lot of structure definitions &c that
642 are now necessarily in the new header; add a couple of new
643 routines which provide status and update statistics from the
644 device into memory; tidy up control of whether stats-keeping is
647 2000-06-06 Hugo Tyson <hmt@cygnus.co.uk>
649 * cdl/ebsa285_eth_drivers.cdl (define_proc): Add #define of
650 CYGDAT_DEVS_ETH_DESCRIPTION in the config file for information.
652 2000-05-12 Hugo Tyson <hmt@cygnus.co.uk>
654 * tests/test_net_realtime.h (tnr_print_activity): New routine to
655 check the system is working, tidied up the API. It works!
657 2000-05-11 Hugo Tyson <hmt@cygnus.co.uk>
659 * cdl/ebsa285_eth_drivers.cdl: Added export of the test header
660 below, and config opts for controlling EEPROM writing and all the
661 status chatter as the device starts up.
663 * src/if_ebsa285.c: Reworked the code for reading and setting the
664 EEPROM that holds the MAC address. This is very ugly, but now
665 more reliable. Also tidied up printing cruft with neater
666 configury, and made it an option (for safety) whether it's
667 possible to write the EEPROM at all.
669 * tests/test_net_realtime.h: New file - it is intended to be used
670 by networking tests to verify that latency is not compromised by
671 the stack and driver. It's very platform specific, hence the
672 location in here. This is a preliminary version only.
674 2000-04-27 Hugo Tyson <hmt@cygnus.co.uk>
676 * src/if_ebsa285.c: A serious re-write. This cuts out a lot of
677 code from the old version and improves the performance greatly.
679 The cruft was mainly doing lots of explicit event communication
680 between the ISR and DSR, when in fact all the state needed is
681 present in the tx/rx rings. So both ISRs and DSRs regard their
682 call as an opportunity to progress everything they can, rather
683 than only dealing with one interrupt cause at a time; the
684 connection between them is now rather looser.
686 Interrups can now be re-enabled after the ISR (in other words they
687 are not masked in the ISR), no need to wait for the DSR, but in
688 consequence some DSR code must mask/unmask intrs as it works.
690 The 82559 appears to be a little slow in reacting to commands and
691 state changes, so some interrupts were being lost - or persisting
692 beyond their desired life - so there's some kinda polling code to
693 deal with that also. We also rely on the foreground to kind of
694 poll in the same way, in the send/can_send calls - we know the
695 stack will re-try if necessary, though this is rare.
697 The driver now works (albeit at much reduced performance) with as
698 few as 6 rx and tx buffers - in other words the "queue full/out of
699 rx buffers" states have been tested and all is well. It works
700 generally fine with 8 buffers of each kind.
702 The mux ISR and DSR are now rather more polled than the old
703 versions; we just try to do things with both devices (if active)
704 by simply calling each unitary ISR/DSR respectively.
706 I also re-ordered some of the code, moving utilities to the end of
707 the file and grouping together Tx and Rx machines a bit better.
709 2000-04-13 Hugo Tyson <hmt@cygnus.co.uk>
711 * src/if_ebsa285.c: Attribution to Ron Spence, Pacific Softworks
712 added as a contributor.
714 2000-04-07 Hugo Tyson <hmt@cygnus.co.uk>
716 * ecos.db: Re-organize device packages. This is a massive change
717 involving deleting all the sources for serial and ethernet drivers
718 from where they used to live in
719 packages/io/serial/current/src/ARCH/PLATFORM.[ch]
720 packages/net/drivers/eth/PLATFORM/current/src/...
721 and reinstating them in
722 packages/devs/serial/ARCH/PLATFORM/current/src/...
723 packages/devs/eth/ARCH/PLATFORM/current/src/...
725 All these new packages are properly defined in ecos.db, and are
726 all of type "hardware" so that a "target" can grab them.
728 This directory layout is descriptive of the devices we have right
729 now, arch and platform are separate levels just to make it easier
730 to navigate in the filesystem and similar to the HAL structure in
733 It is *not* prescriptive of future work; for example, the mythical
734 common highly-portable 16550 serial driver which works on many
735 targets would be called "devs/serial/s16550/current", or a serial
736 device for a particular board (cogent springs to mind) that can
737 work with different CPUs fitted is "devs/serial/cogent/current".
739 Changelogs have been preserved and replicated over all the new
740 packages, so that no history is lost.
742 The contents of individual source files are unchanged; they build
743 in just the same emvironment except for a very few cases where the
744 config file name changed in this movement.
746 Targets in ecos.db have been redefined to bring in all relevant
747 hardware packages including net and serial drivers (but the newly
748 included packages are only active if their desired parent is
751 The names of CDL options (and their #defines of course) stay the
752 same for the serial drivers, for backward compatibility.
754 * templates/*/current.ect: these have had CYGPKG_IO_SERIAL added
755 rather than it being in (almost) all target definitions.
757 2000-03-29 Hugo Tyson <hmt@cygnus.co.uk>
759 * src/if_ebsa285.c (i82559_recv): Be happy with NULLs in the
760 SGlist; it means the caller is out of memory so drop the packet on
761 the floor. Also remove a completely redundant test.
763 2000-03-06 Hugo Tyson <hmt@cygnus.co.uk>
765 * src/if_ebsa285.c (i82559_can_send): Update net driver to new
766 interface style. This is incomplete wrt promiscuous mode, but
767 that's probably about all.
769 2000-02-14 Gary Thomas <gthomas@cygnus.co.uk>
771 * cdl/ebsa285_eth_drivers.cdl: Update CDL to indicate multiple
774 2000-02-14 Hugo Tyson <hmt@cygnus.co.uk>
776 * src/if_ebsa285.c (pci_init_find_82559s): Tidy comments somewhat
777 and set debug and stats collecting defines to most friendly
780 2000-02-10 Hugo Tyson <hmt@cygnus.co.uk>
782 * src/if_ebsa285.c (PacketRxReady): Fix bug; current descriptor
783 was not being write back for the callback to use. Hence asserts
784 on state of rfd were firing in busy times - that leading rfd had
785 already been drained.
787 Also rationalized meaning of DEBUG printy symbols a bit - it's now
788 chatty during startup/foreground manipulations but not in any
789 performance related activities ie. rx or tx.
791 2000-02-09 John Dallaway <jld@cygnus.co.uk>
793 * cdl/ebsa285_eth_drivers.cdl:
795 Reparent under CYGPKG_NET_ETH_DRIVERS and tidy display strings.
797 2000-02-08 Hugo Tyson <hmt@cygnus.co.uk>
799 * src/if_ebsa285.c: New File.
800 * cdl/ebsa285_eth_drivers.cdl: New File.
802 Initial Checkin of EBSA285 Ethernet driver.
804 It's one monolithic file at present, and should be split up into a
805 more generic Intel 82559 driver plus platform-specific parts (PCI
806 et al) plus eCos/Red-Hat-BSD-stack parts.
808 //===========================================================================
809 //####ECOSGPLCOPYRIGHTBEGIN####
810 // -------------------------------------------
811 // This file is part of eCos, the Embedded Configurable Operating System.
812 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
814 // eCos is free software; you can redistribute it and/or modify it under
815 // the terms of the GNU General Public License as published by the Free
816 // Software Foundation; either version 2 or (at your option) any later version.
818 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
819 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
820 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
823 // You should have received a copy of the GNU General Public License along
824 // with eCos; if not, write to the Free Software Foundation, Inc.,
825 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
827 // As a special exception, if other files instantiate templates or use macros
828 // or inline functions from this file, or you compile this file and link it
829 // with other works to produce a work based on this file, this file does not
830 // by itself cause the resulting work to be covered by the GNU General Public
831 // License. However the source code for this file must still be made available
832 // in accordance with section (3) of the GNU General Public License.
834 // This exception does not invalidate any other reasons why a work based on
835 // this file might be covered by the GNU General Public License.
837 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
838 // at http://sources.redhat.com/ecos/ecos-license/
839 // -------------------------------------------
840 //####ECOSGPLCOPYRIGHTEND####
841 //===========================================================================