unified MX27, MX25, MX37 trees
[karo-tx-redboot.git] / packages / devs / eth / intel / i82559 / v2_0 / ChangeLog
1 2007-06-12  Andrew Lunn  <andrew.lunn@ascom.ch>
2
3         * src/if_i82559.c (eth_dsr): Fixed the previous change which broken
4         linkage under some conditions.
5
6 2006-11-23  David Fernandez  <dfernandez@cct.co.uk>
7
8         * src/if_i82559.c Modifications to remove compile warnings.
9
10 2005-01-22  Andrew Lunn  <andrew.lunn@ascom.ch>
11
12         * src/if_i82559.c Added string.h to remove compiler warnings.
13
14 2004-08-12  Jani Monoses <jani@iv.ro>
15
16         * src/if_i82559.c: Fix builing with lwip.
17
18 2004-01-15  Jeff Daly  <jeffrey.daly@intel.com>
19
20         * src/if_i82559.c: support for large EEPROMs
21
22 2004-01-05  Gary Thomas  <gary@mlbassoc.com>
23
24         * src/if_i82559.c: Names of FLASH config types changed.
25
26 2003-02-27  Mark Salter  <msalter@redhat.com>
27
28         * src/if_i82559.c (eth_set_mac_address): Correct writing
29         of wrong address to EEPROM.
30
31 2003-02-22  Mark Salter  <msalter@redhat.com>
32
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.
37
38 2003-02-12  Mark Salter  <msalter@redhat.com>
39
40         * src/if_i82559.c: Remove restriction preventing combination of
41         *_GET_ESA and *_HAS_EEPROM.
42
43 2003-01-03  Gary Thomas  <gary@mlbassoc.com>
44
45         * src/if_i82559.c: 
46         * cdl/intel_i82559_eth_drivers.cdl: Allow finer control over
47         debug (chatter) by making control booldata.
48
49 2002-12-17  Mark Salter  <msalter@redhat.com>
50
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
53         CPU endianess.
54
55 2002-10-06  Andrew Lunn  <andrew.lunn@ascom.ch>
56
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.
61
62 2002-07-24  Gary Thomas  <gary@mlbassoc.com>
63
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.
67
68 2002-06-14  Gary Thomas  <gary@chez-thomas.org>
69
70         * src/if_i82559.c: 
71         Need to include <pkgconf/io_eth_drivers.h> for proper configuration
72         of stand-alone (polled) vs. system (interrupt driven) mode.
73
74 2002-04-09  Hugo Tyson  <hmt@redhat.com>
75
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.
80
81 2002-03-26  Jonathan Larmour  <jlarmour@redhat.com>
82
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.
85
86 2002-03-18  Hugo Tyson  <hmt@redhat.com>
87
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]
92
93 2002-02-25  Mark Salter  <msalter@redhat.com>
94
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.
98
99 2002-02-20  Hugo Tyson  <hmt@redhat.com>
100
101         * include/i82559_info.h: New fields to record/control multicast
102         all reception, oversized packet reception and promiscuous mode
103         neatly.
104
105         * src/if_i82559.c: Initial support for multicast address reception
106         filtering.
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.
115         
116 2002-02-19  Mark Salter  <msalter@redhat.com>
117
118         * src/if_i82559.c (pci_init_find_82559s): Don't use IRQ support if
119         CYGPKG_IO_ETH_DRIVERS_STAND_ALONE.
120
121 2002-01-28  Mark Salter  <msalter@redhat.com>
122
123         * src/if_i82559.c (pci_init_find_82559s): Removed CYG_ASSERT which
124         assumed system PCI window exists.
125
126 2002-01-10  Jonathan Larmour  <jlarmour@redhat.com>
127
128         * src/if_i82559.c (find_82559s_match_func): Add some more compatible PCI
129         ids.
130
131 2002-01-03  Mark Salter  <msalter@redhat.com>
132
133         * src/if_i82559.c (pci_init_find_82559s): Remove check that
134         assumes driver owns entire PCI window.
135
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.
139
140 2001-11-19  Hugo Tyson  <hmt@redhat.com>
141 2001-11-19  Anssi Pulkkinen <Anssi.Pulkkinen@ascom.ch>
142
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]
151
152 2001-09-20  Gary Thomas  <gthomas@redhat.com>
153
154         * src/if_i82559.c: Add declaration of 'i82559_stop' to quiet warning.
155
156 2001-09-13  Hugo Tyson  <hmt@redhat.com>
157
158         * cdl/intel_i82559_eth_drivers.cdl: 
159         * src/if_i82559.c: 
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.
163
164 2001-09-12  Hugo Tyson  <hmt@redhat.com>
165
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.
169
170 2001-08-29  Hugo Tyson  <hmt@redhat.com>
171
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
178         CPU time at all.
179         
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.
189
190 2001-08-22  Gary Thomas  <gthomas@redhat.com>
191
192         * src/if_i82559.c: 
193         printf() is no longer a part of RedBoot.  Thus all programs
194         must use diag_printf() and related functions instead.
195
196 2001-06-22  Jesper Skov  <jskov@redhat.com>
197
198         * src/if_i82559.c (i82559_init): Handle EEPROMS without CRC.
199
200 2001-05-16  Jonathan Larmour  <jlarmour@redhat.com>
201
202         * src/if_i82559.c (udelay): Use virtual vector rather than assuming
203         hal_delay_us() exists.
204
205 2001-04-09  Hugo Tyson  <hmt@redhat.com>
206
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.
213
214 2001-04-09  Hugo Tyson  <hmt@redhat.com>
215
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.
226
227 2001-04-09  Hugo Tyson  <hmt@redhat.com>
228
229         * src/if_i82559.c (i82559_start): Warnings fixed; unused vars
230         following previous change.
231
232 2001-04-09  Hugo Tyson  <hmt@redhat.com>
233
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.
239
240 2001-03-28  Hugo Tyson  <hmt@redhat.com>
241
242         * src/if_i82559.c (update_statistics): Fix warning - only declare
243         op_i82559 if we use it - from previous change.
244
245 2001-03-23  Hugo Tyson  <hmt@redhat.com>
246
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.
257
258         * include/i82559_info.h (I82559): Add within_send field.
259
260 2001-03-15  Hugo Tyson  <hmt@redhat.com>
261
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
268         the unusual case.
269
270 2001-03-13  Hugo Tyson  <hmt@redhat.com>
271
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.
276
277 2001-03-12  Hugo Tyson  <hmt@redhat.com>
278
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
287         interrupt.
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.
291
292 2001-03-12  Hugo Tyson  <hmt@redhat.com>
293
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.
308         
309
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.
314         
315         * include/i82559_info.h (I82559): Added two words for managing tx
316         lockup timeouts since this must be per-device.
317
318 2001-03-02  Hugo Tyson  <hmt@redhat.com>
319
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.
324
325 2001-03-01  Hugo Tyson  <hmt@redhat.com>
326
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
333         way of doing IO.
334
335 2001-03-01  Hugo Tyson  <hmt@redhat.com>
336
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:
339
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.
343
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
346         also available.
347
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
351         acknowledgments.
352
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.
356
357         o LE definitions of a few macros that were missing.
358
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.
364
365         o Re-org of mux/simplex deliver and isr's for new configuration.
366
367         o Couple of extra debug printouts.
368
369 2001-01-26  Jesper Skov  <jskov@redhat.com>
370
371         * src/if_i82559.c: Added FIXME for promiscuous mode.
372
373 2001-01-25  Jesper Skov  <jskov@redhat.com>
374
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
378         _isr functions.
379         * include/i82559_info.h: Remove debug hacks.
380         Fix declaration.
381
382         * src/if_i82559.c: Moved device descriptors into platform header.
383         Allow individual devices to hardwire ESA. Handle N devices instead
384         of just 1 or 2.
385         * include/i82559_info.h: ESA hardwired flag added.
386         * cdl/intel_i82559_eth_drivers.cdl: Device details moved to
387         platform CDL.
388
389         * src/if_i82559.c (i82559_start): Poll status after dump command.
390
391 2001-01-24  Jesper Skov  <jskov@redhat.com>
392
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
396         cmds.
397         (i82559_reset): Cleaned up to spec. Init register bases after
398         reset.
399         Fix initialization of hardwired ESA.
400         Correct configuration command.
401         Fix rcv len masking.
402         (eth_set_mac_address): Set driver's ESA as well. Proper check for
403         completion.
404         Fix LE structure offsets.
405         (i82559_start): Call new eth_set_config to enable device. Last
406         hacks cleaned up.
407         Remove a few printfs.
408
409 2001-01-23  Jesper Skov  <jskov@redhat.com>
410
411         * src/if_i82559.c: Debug hackery and some endian issues resolved.
412
413 2001-01-22  Jesper Skov  <jskov@redhat.com>
414
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.
419
420 2001-01-19  Jesper Skov  <jskov@redhat.com>
421
422         * cdl/intel_i82559_eth_drivers.cdl: Hack for just one interface
423         now.
424         * src/if_i82559.c: Fix IO functions. Handle EEPROM not being
425         attached to device.
426
427         * src/if_i82559.c: Use uncached/physical address translation
428         macros.
429
430 2001-01-15  Jesper Skov  <jskov@redhat.com>
431
432         * src/if_i82559.c: Handle endian differences between controller
433         and CPU. Leave usdelay to HAL. Hack around PCI-base-at-0
434         assumption.
435         Increase SK_DELAY (not that it changed anything, but now it's to
436         the spec), hardwire static ESA.
437         
438 2001-01-12  Jesper Skov  <jskov@redhat.com>
439
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.
444
445 2001-01-10  Jesper Skov  <jskov@redhat.com>
446         
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.
450
451 2000-12-07  Jesper Skov  <jskov@redhat.com>
452
453         * cdl/intel_i82559_eth_drivers.cdl: Cloned from the EBSA driver.
454         * include/i82559_info.h: Same.
455         * src/if_i82559.c: Same.
456
457 2000-11-19  Gary Thomas  <gthomas@redhat.com>
458
459         * src/if_ebsa285.c (pci_init_find_82559s): Intel has at least
460         two devices equivalent to the 82559.  Support both (0x1229, 0x01030).
461
462 2000-10-05  Hugo Tyson  <hmt@redhat.com>
463
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.
477
478 2000-09-11  Hugo Tyson  <hmt@cygnus.co.uk>
479
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.
483
484 2000-09-06  Hugo Tyson  <hmt@cygnus.co.uk>
485
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"]
493
494 2000-09-01  Hugo Tyson  <hmt@cygnus.co.uk>
495
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.
510
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.
519
520 2000-09-01  Hugo Tyson  <hmt@cygnus.co.uk>
521
522         * tests/test_net_realtime.h: Tighten up the latency requirements
523         by a factor of 5; it all seems happy, so committed.
524
525 2000-08-25  Hugo Tyson  <hmt@cygnus.co.uk>
526
527         * src/if_ebsa285.c (i82559_ioctl): A little further diddling; have
528         a bool to say whether the dot3 info is filled in.
529
530 2000-08-24  Hugo Tyson  <hmt@cygnus.co.uk>
531
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.
535
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.
542
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
546         driver environment.
547
548 2000-08-15  Hugo Tyson  <hmt@cygnus.co.uk>
549
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.
556         [CASE 104353]
557
558 2000-08-08  Hugo Tyson  <hmt@cygnus.co.uk>
559
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.
564         [CASE 104289]
565
566 2000-08-07  Gary Thomas  <gthomas@redhat.com>
567
568         * src/if_ebsa285.c (pciwindow_mem_alloc): Take out very noisy debug.
569
570 2000-08-03  Gary Thomas  <gthomas@redhat.com>
571
572         * src/if_ebsa285.c: Changes for stand-alone mode.
573
574         * cdl/ebsa285_eth_drivers.cdl: Ethernet driver package hierarchy changed.
575         Add option to control number of interfaces.
576
577 2000-07-28  Hugo Tyson  <hmt@cygnus.co.uk>
578
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]
583
584 2000-07-26  Gary Thomas  <gthomas@redhat.com>
585
586         * src/if_ebsa285.c: Update for new eth_drv interfaces.
587
588 2000-07-18  Hugo Tyson  <hmt@cygnus.co.uk>
589
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.
596
597 2000-07-17  Hugo Tyson  <hmt@cygnus.co.uk>
598
599         * src/if_ebsa285.c (i82559_poll): New function, just to fill in
600         the interface record; not used.
601
602 2000-06-27  Hugo Tyson  <hmt@cygnus.co.uk>
603
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.
610
611         * include/ebsa285_info.h: Only describe the I82559_COUNTERS
612         i82559_counters[2]; structs if full stats are to be kept.
613
614         * src/if_ebsa285.c (update_statistics): Only include this if full
615         stats are to be kept.
616
617 2000-06-27  Hugo Tyson  <hmt@cygnus.co.uk>
618
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.
622
623 2000-06-14  Hugo Tyson  <hmt@cygnus.co.uk>
624
625         * cdl/ebsa285_eth_drivers.cdl: Add option to control statistics
626         keeping.
627
628         * include/ebsa285_info.h: Act on it.
629
630 2000-06-13  Hugo Tyson  <hmt@cygnus.co.uk>
631
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.
635
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.
640
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
645         enabled.
646
647 2000-06-06  Hugo Tyson  <hmt@cygnus.co.uk>
648
649         * cdl/ebsa285_eth_drivers.cdl (define_proc): Add #define of
650         CYGDAT_DEVS_ETH_DESCRIPTION in the config file for information.
651
652 2000-05-12  Hugo Tyson  <hmt@cygnus.co.uk>
653
654         * tests/test_net_realtime.h (tnr_print_activity): New routine to
655         check the system is working, tidied up the API.  It works!
656
657 2000-05-11  Hugo Tyson  <hmt@cygnus.co.uk>
658
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.
662
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.
668
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.
673
674 2000-04-27  Hugo Tyson  <hmt@cygnus.co.uk>
675
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.
678
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.
685
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.
689
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.
696
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.
701
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.
705
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.
708
709 2000-04-13  Hugo Tyson  <hmt@cygnus.co.uk>
710
711         * src/if_ebsa285.c: Attribution to Ron Spence, Pacific Softworks
712         added as a contributor.
713
714 2000-04-07  Hugo Tyson  <hmt@cygnus.co.uk>
715
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/...
724
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.
727         
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
731         the filesystem.
732
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".
738
739         Changelogs have been preserved and replicated over all the new
740         packages, so that no history is lost.
741
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.
745
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
749         available.)
750         
751         The names of CDL options (and their #defines of course) stay the
752         same for the serial drivers, for backward compatibility.
753
754         * templates/*/current.ect: these have had CYGPKG_IO_SERIAL added
755         rather than it being in (almost) all target definitions.
756         
757 2000-03-29  Hugo Tyson  <hmt@cygnus.co.uk>
758
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.
762
763 2000-03-06  Hugo Tyson  <hmt@cygnus.co.uk>
764
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.
768
769 2000-02-14  Gary Thomas  <gthomas@cygnus.co.uk>
770
771         * cdl/ebsa285_eth_drivers.cdl: Update CDL to indicate multiple 
772         interface support.
773
774 2000-02-14  Hugo Tyson  <hmt@cygnus.co.uk>
775
776         * src/if_ebsa285.c (pci_init_find_82559s): Tidy comments somewhat
777         and set debug and stats collecting defines to most friendly
778         settings.
779
780 2000-02-10  Hugo Tyson  <hmt@cygnus.co.uk>
781
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.
786
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.
790
791 2000-02-09  John Dallaway  <jld@cygnus.co.uk>
792
793         * cdl/ebsa285_eth_drivers.cdl:
794
795         Reparent under CYGPKG_NET_ETH_DRIVERS and tidy display strings.
796
797 2000-02-08  Hugo Tyson  <hmt@cygnus.co.uk>
798
799         * src/if_ebsa285.c: New File.
800         * cdl/ebsa285_eth_drivers.cdl: New File.
801
802         Initial Checkin of EBSA285 Ethernet driver.
803
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.
807         
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.
813 //
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.
817 //
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
821 // for more details.
822 //
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.
826 //
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.
833 //
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.
836 //
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 //===========================================================================
842         
843         
844