2001-09-26  Jesper Skov  <jskov@redhat.com>

	* cdl/eth_drivers.cdl: Require the string functions.

	* src/stand_alone/eth_drv.c: Fix warnings.

2001-09-25  Hugo Tyson  <hmt@redhat.com>

	* src/net/eth_drv.c (eth_drv_dsr): Assert that the "sc" given to
	eth_drv_dsr() really is a sc from the valid list.  This can save a
	few hours debug time of a typo.

2001-09-13  Hugo Tyson  <hmt@redhat.com>

	* src/net/eth_drv.c (eth_drv_tickle_devices): New function to call
	can_send() on all devices to allow them to unstick from a lost
	interrupt or other wedge - it's up to the device to detect this,
	of course, can_send() does not explicitly do this, it's just used
	as an opportunity harmlessly to get control into the device so it
	can examine its world.

2001-09-05  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c (eth_drv_init): Don't initialize
	structures if ESA is zero.  This is used by low level drivers
	to indicate that a device is present, but can't currently be
	used.  The eCos driver handles this case as well.

2001-08-31  Hugo Tyson  <hmt@redhat.com>
2001-08-31  Andrew Lunn <Andrew.Lunn@ascom.ch>

	* src/net/eth_drv.c (eth_drv_tx_done): Guard against a NULL key
	return - which can be caused by race conditions in the driver,
	this is the neatest fixup.  It's good defensive programming
	anyway and ASCOM's tests indicate a benefit for CASE 106059.

2001-08-22  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c: 
	printf() is no longer a part of RedBoot.  Thus all programs
	must use diag_printf() and related functions instead.

	* cdl/eth_drivers.cdl: Only enable warning/debug modes if RedBoot
	is present as the debug environment (since there are implicit
	dependencies on RedBoot functions).

2001-08-20  Jonathan Larmour  <jlarmour@redhat.com>

	* src/net/eth_drv.c (eth_drv_send): Move endif location to fix build
	error.

2001-08-17  Jonathan Larmour  <jlarmour@redhat.com>

	* cdl/eth_drivers.cdl (CYGSEM_IO_ETH_DRIVERS_DEBUG): Now booldata.
	* src/stand_along/eth_drv.c (eth_drv_tx_done): Use different
	value of CYGSEM_IO_ETH_DRIVERS_DEBUG for verbosity.

2001-08-14  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c (eth_drv_write): 
	(eth_drv_tx_done): 
	(eth_drv_read): Better handling of stacking (layering) of drivers.
	RedBoot (stand alone code) is designed to call into the eCos 
	stack and these changes make sure that this is done properly
	nested/stacked.  These changes also affect the behaviour positively
	for CR 902745-CR.

	* src/net/eth_drv.c (eth_drv_send): Add locking of driver while
	actual hardware routines are involved.  Since the same driver
	can be shared by both eCos and RedBoot, it is imperative that
	additional locking (in the form of locking the scheduler) be
	employed during this window to make sure that the hardware is
	handled in complete, consistent steps.  This helps with known
	bug CR 902745-CR.

2001-08-09  Hugo Tyson  <hmt@redhat.com>

	* src/net/eth_drv.c (eth_drv_recv): Add a pair of
	CYGARC_HAL_SAVE_GP()/CYGARC_HAL_RESTORE_GP() on entry and exit;
	this function is intercalled between RedBoot and the application.
	A minor re-org at the ending to accommodate these macros' nesting.
	(eth_drv_tx_done): CYGARC_HAL_SAVE_GP()/CYGARC_HAL_RESTORE_GP().

	* src/stand_alone/eth_drv.c (eth_drv_tx_done): Add a pair of
	CYGARC_HAL_SAVE_GP()/CYGARC_HAL_RESTORE_GP() on entry and exit;
	this function is intercalled between RedBoot and the application.
	Also make printing message about "tx_done for other key" also
	conditional on net_debug variable - it's commonplace.
	(eth_drv_recv): CYGARC_HAL_SAVE_GP()/CYGARC_HAL_RESTORE_GP().
	(eth_drv_copy_recv): CYGARC_HAL_SAVE_GP()/CYGARC_HAL_RESTORE_GP().

2001-07-03  Gary Thomas  <gthomas@redhat.com>

	* src/net/eth_drv.c (eth_drv_recv): Better cleanup when running
	out of mbufs - could have lost mbufs before.

2001-06-21  David Woodhouse <dwmw2@redhat.com>

	* src/stand_alone/eth_drv.c: Timeout when waiting for Ethernet
	driver to finish sending packet.
	* src/stand_alone/eth_drv.c: Don't delay if it's ready immediately.

2001-06-11  Gary Thomas  <gthomas@redhat.com>

	* cdl/eth_drivers.cdl: Make debug default for RedBoot.

2001-05-22  Jonathan Larmour  <jlarmour@redhat.com>

	* cdl/eth_drivers.cdl: New option: CYGSEM_IO_ETH_DRIVERS_PASS_PACKETS
	which replaces the static define in...
	* src/stand_alone_eth_drv.c: Rename ETH_DRV_PASS_PACKETS to
	new CDL option above.
	Also, ensure references to start_console/end_console are conditional
	on CYGSEM_IO_ETH_DRIVERS_DEBUG.

2001-05-22  Hugo Tyson  <hmt@redhat.com>
2001-05-22  Sanjay Bisen <Sanjay.Bisen@ascom.ch>

	* src/net/eth_drv.c (eth_drv_recv): Patch from Sanjay at Ascom; it
	leaked one mbuf if you run out of clusters.  Fix is simply to
	free m in addition to top.

	* src/net/eth_drv.c (eth_drv_run_deliveries): Fixed a warning with
	an int cast in HAL_CTRLC_CHECK().

2001-03-21  Gary Thomas  <gthomas@redhat.com>

	* cdl/eth_drivers.cdl: Fewer buffers needed in stand-alone mode.

2001-03-12  Hugo Tyson  <hmt@redhat.com>

	* cdl/eth_drivers.cdl: Permit defines for
	CYGPKG_IO_ETH_DRIVERS_STAND_ALONE and CYGPKG_IO_ETH_DRIVERS_NET.
	The generic i82559 driver needs to know, unfortunately; it calls
	its own DSR directly to unblock after a lost interrupt.  And you
	mustn't call the DSR under RedBoot == ....STAND_ALONE.

2001-01-15  Jesper Skov  <jskov@redhat.com>

	* src/net/eth_drv.c (eth_drv_init): Do not use enaddr if NULL.

2001-01-07  Gary Thomas  <gthomas@redhat.com>

	* cdl/eth_drivers.cdl: Add interface 'CYGPKG_NET_DRIVER_FRAMEWORK'
	to describe interdependencies between network stack and driver
	framework packages.

2001-01-04  Gary Thomas  <gthomas@redhat.com>

	* src/net/eth_drv.c (eth_drv_tx_done): Update count of Tx packets.

2000-12-11  Gary Thomas  <gthomas@redhat.com>

	* src/net/eth_drv.c (eth_drv_run_deliveries): Support ^C when
	using network based debug channel.

2000-12-02  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c (eth_drv_write): Debug: dump packet
	before calling hardware routine for improved usability.

2000-10-30  Gary Thomas  <gthomas@redhat.com>

	* include/eth_drv.h: Fix compile error in stand-alone mode.

2000-10-17  Hugo Tyson  <hmt@redhat.com>
2000-10-10  Andrew Lunn <Andrew.Lunn@ascom.ch>
	* cdl/eth_drivers.cdl: Add configury to disable the warnings about
	out of mbufs for receives.

	* src/net/eth_drv.c: The changes required for the above.

2000-09-28  Hugo Tyson  <hmt@redhat.com>

	* src/net/eth_drv.c (eth_drv_run_deliveries): Remove race
	condition; a chance to deliver could be delayed until "next time"
	if the DSR snuck in just right.

2000-09-14  Hugo Tyson  <hmt@redhat.com>

	* cdl/eth_drivers.cdl: Add configury to control new features.  All
	is controlled globally by CYGPKG_IO_ETH_DRIVERS_SIMULATED_FAILURES
	which is by default off, natch.

	* src/net/eth_drv.c (simulate_fail): Implement simulated failures
	in ethernet packet delivery - independent tx and rx dropping and
	rx packet corruption.  Also a "line break" drop-all feature.

2000-09-13  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c: Take out noisy dump when out of buffers.

2000-09-11  Hugo Tyson  <hmt@cygnus.co.uk>

	* src/stand_alone/eth_drv.c (eth_drv_write): If we timeout waiting
	for the write to complete, do reset the vectors to point to the
	application, rather just a bald "return".

2000-09-08  Hugo Tyson  <hmt@cygnus.co.uk>

	* include/netdev.h (NETDEVTAB_ENTRY): Work around feature of new
	version of CYG_HAL_TABLE_ENTRY() whereby no spaces are allowed.

2000-09-07  Jonathan Larmour  <jlarmour@redhat.com>

	* include/netdev.h (cyg_netdevtab_entry_t): Correct syntax for
	CYG_HAL_TABLE_TYPE

2000-09-04  Jonathan Larmour  <jlarmour@redhat.com>

	* include/netdev.h (cyg_netdevtab_entry_t): Apply CYG_HAL_TABLE_TYPE

2000-09-01  Hugo Tyson  <hmt@cygnus.co.uk>

	* src/stand_alone/eth_drv.c (eth_drv_dsr): New function, never
	called but maybe referenced in stand_alone context, which lets
	redboot work in the new world.

2000-09-01  Hugo Tyson  <hmt@cygnus.co.uk>

	* OVERVIEW: This is part of the change to the network stack to
	greatly reduce latencies both of (other) DSRs and of thread
	scheduling.  All the work that the network stack *and* individual
	ether drivers used to do in DSRs (including alarm callbacks and
	data copies to/from the device memory) is moved into a "fast
	network thread" instead.  It calls a device's "deliver" function
	to do the work that was previously in the DSR.  This is a separate
	thread so that it can be set higher priority than application
	threads in order to minimize packet loss (depending on the
	driver), if required (the application threads presumed to be
	higher priority in turn than the network thread).  A crucial
	consequence of this is that we are no longer locking against DSRs,
	so a plain mutex can be used rather than the global scheduler
	lock, thus simplifying all the splfoo/splx() style functions.

	These changes WILL BREAK individual device drivers until they are
	updated AND the standalone logical ether driver in this component,
	until it is updated also.

	* include/eth_drv.h (ETH_DRV_SC): Add "deliver" entry to struct
	eth_hwr_funs interface record; declare available DSR and flag for
	"needs delivery" in SC status field.

	* src/net/eth_drv.c (eth_drv_run_deliveries): New function,
	performs callbacks to deliver funcs for all devs that want it.
	(eth_drv_dsr): New function, sets flag in sc and calls up to net
	stack to schedule the fast network thread.
	(eth_drv_send): No need to lock scheduler here.

2000-08-29  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c: Use null buffer, (char *)0,
	instead of wasting memory - low level drivers must be designed
	to handle this case.

2000-08-28  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c: Use new configuration parameters.

	* cdl/eth_drivers.cdl: Add new configury to control number of
	internal buffers used by this layer.  Also exposed some of the
	debug flags here.

2000-08-25  Hugo Tyson  <hmt@cygnus.co.uk>

	* include/eth_drv_stats.h (ether_drv_stats): A little further
	diddling; have a bool to say whether the dot3 info is filled in.

2000-08-24  Hugo Tyson  <hmt@cygnus.co.uk>

	* src/net/eth_drv.c (eth_drv_ioctl): Implement ioctl() calls.
	sockio.h numbers SIOCGIFSTATS and SIOCGIFSTATSUD map to
	ETH_DRV_GET_IF_STATS and ETH_DRV_GET_IF_STATS_UD respectively.

	* include/eth_drv.h (ETH_DRV_GET_IF_STATS_UD): Add new device
	interface ioctl() numbers, to get the struct below filled in.
	Also pull in the definition include file (below).

	* include/eth_drv_stats.h (ether_drv_stats): New file: Define
	common structure for ether devices to return stats info to higher
	up, via an ioctl() call.  SNMP uses this.

2000-08-23  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c: 
	* include/eth_drv.h: Low level drivers now need to export a 
	function which returns the interrupt vector used by that interface.
	This allows outside code to determine this in a portable fashion.

2000-08-16  Gary Thomas  <gthomas@redhat.com>

	* src/stand_alone/eth_drv.c: 
	* include/eth_drv.h: Clean up warnings (better protyping).

	* src/stand_alone/eth_drv.c (eth_drv_write): Abandon sending
	packet if device goes not ready for a long time (in some cases,
	this is the only indication that the link is down).

2000-08-07  Gary Thomas  <gthomas@redhat.com>

	* src/net/eth_drv.c (eth_drv_recv): Add safety in case this gets
	called [from stand-alone code] while interface is not up.
	
	* src/stand_alone/eth_drv.c: 
	* include/eth_drv.h: Rework to more fully support mixed stand-alone
	and system (eCos) stacks.

2000-08-03  Gary Thomas  <gthomas@redhat.com>

	* cdl/eth_drivers.cdl: Reparent within I/O, not NET.  This allows
	for stand-alone use as well as support for other stack implementations.

2000-07-28  Hugo Tyson  <hmt@cygnus.co.uk>

	* src/eth_drv.c (eth_drv_recv): Assert that the length we're asked
	to deal with is at least an ether header, and also be defensive in
	any case; discard small packets.  [CASE 104206]

2000-07-26  Gary Thomas  <gthomas@redhat.com>

	* src/eth_drv.c: 
	* include/eth_drv.h: Change interfaces used by hardware layer to
	be "soft" (pointers to functions).  This will allow those drivers
	to be shared by applications and the ROM/debug environment.

2000-07-15  Gary Thomas  <gthomas@redhat.com>

	* include/eth_drv.h: Add [initial] extensions to let this
	layer work either in an eCos environment or stand-alone.

2000-07-11  Gary Thomas  <gthomas@redhat.com>

	* include/eth_drv.h: Add minimal PCMCIA support.

	* src/eth_drv.c (eth_drv_netdev): New function - used to find the
	ethernet device info for PCMCIA devices.

2000-06-23  Hugo Tyson  <hmt@cygnus.co.uk>

	* src/eth_drv.c (eth_drv_send): Do not consume an SG entry for
	zero length data; tolerate overflow of the SG.  Before this, pings
	of 6000 bytes crashed the system!

	You can now set net_debug to 2 to get quieter output; 1 gives the
	whole packet dump as before.

	* include/eth_drv.h (MAX_ETH_DRV_SG): Make this 16 so that an MTU
	made of all mbufs will not overflow.

2000-03-28  Gary Thomas  <gthomas@redhat.com>

	* src/eth_drv.c (eth_drv_recv): Tolerate running out of MBUFs
	instead of "panic"ing.

2000-03-08  Gary Thomas  <gthomas@redhat.com>

	* src/eth_drv.c: Add some function [block] comments.
	(eth_drv_send): Use eCos scheduler lock instead of interrupt lock.

2000-03-08  Hugo Tyson  <hmt@cygnus.co.uk>

	* doc/driver_doc: Add some clarification about what's called when,
	proofreading results, shorter lines so I can print it nicely.

2000-03-06  Gary Thomas  <gthomas@redhat.com>

	* src/eth_drv.c: 
	* include/eth_drv.h: 
	* doc/driver_doc: Remove generic "priv"ate references.

2000-02-29  Gary Thomas  <gthomas@cygnus.co.uk>

	* src/eth_drv.c: 
	* include/eth_drv.h: New expanded API for hardware drivers.

2000-02-18  Gary Thomas  <gthomas@cygnus.co.uk>

	* src/eth_drv.c (eth_drv_send): Disable interrupts while initiating
	the buffer send - avoid a possible race.

2000-02-08  John Dallaway  <jld@cygnus.co.uk>

	* cdl/eth_drivers.cdl:
	Reparent under CYGPKG_NET and tidy display strings.

//===========================================================================
//####COPYRIGHTBEGIN####
//                                                                          
// -------------------------------------------                              
// The contents of this file are subject to the Red Hat eCos Public License 
// Version 1.1 (the "License"); you may not use this file except in         
// compliance with the License.  You may obtain a copy of the License at    
// http://www.redhat.com/                                                   
//                                                                          
// Software distributed under the License is distributed on an "AS IS"      
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.  See the 
// License for the specific language governing rights and limitations under 
// the License.                                                             
//                                                                          
// The Original Code is eCos - Embedded Configurable Operating System,      
// released September 30, 1998.                                             
//                                                                          
// The Initial Developer of the Original Code is Red Hat.                   
// Portions created by Red Hat are                                          
// Copyright (C) 1998, 1999, 2000, 2001 Red Hat, Inc.                             
// All Rights Reserved.                                                     
// -------------------------------------------                              
//                                                                          
//####COPYRIGHTEND####
//===========================================================================
	
	

