cvs commit: src/sys/conf NOTES files.powerpc src/sys/dev/bm
if_bm.c if_bmreg.h if_bmvar.h src/sys/dev/mii lxtphy.c
src/sys/modules Makefile src/sys/modules/bm Makefile
jhb at freebsd.org
Sun Jun 8 04:57:17 UTC 2008
On Saturday 07 June 2008 06:58:32 pm Marcel Moolenaar wrote:
> marcel 2008-06-07 22:58:32 UTC
> FreeBSD src repository
> Modified files:
> sys/conf NOTES files.powerpc
> sys/dev/mii lxtphy.c
> sys/modules Makefile
> sys/powerpc/conf GENERIC
> Added files:
> sys/dev/bm if_bm.c if_bmreg.h if_bmvar.h
> sys/modules/bm Makefile
> SVN rev 179645 on 2008-06-07 22:58:32Z by marcel
> Add support for the Apple Big Mac (BMAC) Ethernet controller,
> found on various Apple G3 models.
> Submitted by: Nathan Whitehorn
A few notes from a quick perusal:
You should not need locking in the mii read/write routines as the lock is
already held at the higher levels via the ifmedia handlers and the timer
routine. Once that is done you can remove MTX_RECURSE from the mutex.
New drivers should probably just use bus_foo() (e.g. bus_read_1()) rather than
bus_space_foo(). This would mean not having the bus space tag/handle in the
ether_ifattach() already sets if_data.ifi_hdrlen to the correct size for
ethernet so no need to do that in the attach routine.
In detach you should only hold the lock over the call to bm_stop(). Right now
it is subjec to deadlocks by holding it over bus_teardown_intr(), for
example. The callout_drain() must be moved after the bm_stop(). It is
also missing a call to ether_ifdetach(). The first part of detach shound
Then you can free DMA memory and I/O resources and finally destroy the mutex.
The detach routine is also missing a call to if_free() (near the bottom
usually, but anytime after the above code sequence is fine).
bm_shutdown() is missing locking.
bm_stop() should do a callout_stop() of the timer. There isn't a need to
check for link status or tx timeouts when the device is marked down.
You really don't need to have the EJUSTRETURN magic in the watchdog routine.
The callout code doesn't mind if you schedule the callout twice.
More information about the cvs-src