#
267654 |
|
19-Jun-2014 |
gjb |
Copy stable/9 to releng/9.3 as part of the 9.3-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
248078 |
|
08-Mar-2013 |
marius |
MFC: r243857 (partial)
Mechanically substitute flags from historic mbuf allocator with malloc(9) flags in sys/dev.
|
#
242908 |
|
12-Nov-2012 |
dim |
MFC r242625:
Remove duplicate const specifiers in many drivers (I hope I got all of them, please let me know if not). Most of these are of the form:
static const struct bzzt_type { [...list of members...] } const bzzt_devs[] = { [...list of initializers...] };
The second const is unnecessary, as arrays cannot be modified anyway, and if the elements are const, the whole thing is const automatically (e.g. it is placed in .rodata).
I have verified this does not change the binary output of a full kernel build (except for build timestamps embedded in the object files).
Reviewed by: yongari, marius
|
#
229093 |
|
31-Dec-2011 |
hselasky |
MFC r226173, r227843, r227848 and r227908: Use DEVMETHOD_END to mark end of device methods. Remove superfluous device methods. Add some missing __FBSBID() macros.
|
#
227277 |
|
06-Nov-2011 |
marius |
MFC: r226995, r227042
- Import the common MII bitbang'ing code from NetBSD and convert drivers to take advantage of it instead of duplicating it. This reduces the size of the i386 GENERIC kernel by about 8k. The only potential in-tree users left unconverted are ed(4) and xe(4). Xe(4) generally should be changed to use miibus(4) instead of implementing PHY handling on its own, as otherwise it makes not much sense to add a dependency on miibus(4)/mii_bitbang(4) to it just for the MII bitbang'ing code. Ed(4) has some chip specific things interwinded with the MII bitbang'ing code and it's unclear whether it can be converted to common code, at least not without thorough testing of all the various chips supported by ed(4). The common MII bitbang'ing code also is useful in the embedded space for using GPIO pins to implement MII access. - Based on lessons learnt with dc(4) (see r185750), add bus barriers to the MII bitbang read and write functions of the other drivers converted in order to ensure the intended ordering. Given that register access via an index register as well as register bank/window switching is subject to the same problem, also add bus barriers to the respective functions of smc(4), tl(4) and xl(4). - Sprinkle some const.
Thanks to the following testers: Andrew Bliznak (nge(4)), nwhitehorn@ (bm(4)), yongari@ (sis(4) and ste(4)) Thanks to Hans-Joerg Sirtl for supplying hardware to test stge(4).
Reviewed by: yongari (subset of drivers) Approved by: re (kib) Obtained from: NetBSD (partially)
|
#
225736 |
|
22-Sep-2011 |
kensmith |
Copy head to stable/9 as part of 9.0-RELEASE release cycle.
Approved by: re (implicit)
|
#
214264 |
|
24-Oct-2010 |
marius |
- Add IFM_10_2 and IFM_10_5 media via tlphy(4) only in case the respective interface also has such connectors. - In tl_attach() unify three different ways of obtaining the device and vendor IDs and remove the now obsolete tl_dinfo from tl_softc. - Given that tlphy(4) only handles the integrated PHYs of NICs driven by tl(4) make it only probe on the latter. - Switch mlphy(4) and tlphy(4) to use mii_phy_add_media()/mii_phy_setmedia(). - Simplify looking for the respective companion PHY in mlphy(4) and tlphy(4) by ignoring the native one by just comparing the device_t's directly rather than the device name.
|
#
213894 |
|
15-Oct-2010 |
marius |
Converted the remainder of the NIC drivers to use the mii_attach() introduced in r213878 instead of mii_phy_probe(). Unlike r213893 these are only straight forward conversions though.
Reviewed by: yongari
|
#
199560 |
|
19-Nov-2009 |
jhb |
- Hook into the existing stat timer to drive the transmit watchdog instead of using if_watchdog and if_timer. - Reorder detach to call ether_ifdetach() before anything else in tl(4) and wb(4).
|
#
199414 |
|
17-Nov-2009 |
jhb |
Use the bus_*() routines rather than bus_space_*() for register operations.
|
#
195049 |
|
26-Jun-2009 |
rwatson |
Use if_maddr_rlock()/if_maddr_runlock() rather than IF_ADDR_LOCK()/ IF_ADDR_UNLOCK() across network device drivers when accessing the per-interface multicast address list, if_multiaddrs. This will allow us to change the locking strategy without affecting our driver programming interface or binary interface.
For two wireless drivers, remove unnecessary locking, since they don't actually access the multicast address list.
Approved by: re (kib) MFC after: 6 weeks
|
#
188463 |
|
10-Feb-2009 |
imp |
Fix shutdown prototypes.
|
#
183714 |
|
09-Oct-2008 |
peter |
Clean out some empty mergeinfo records, presumably by people doing local cp/mv operations. The full repo-relative URL should be specified for the source in these cases.
|
#
181738 |
|
14-Aug-2008 |
imp |
Move the tl driver form sys/pci to sys/dev/tl.
|
#
169414 |
|
09-May-2007 |
yar |
tl(4) appears to support long frames.
Tested by: Peter Jeremy <peterjeremy at optushome dot com dot au>
|
#
166901 |
|
23-Feb-2007 |
piso |
o break newbus api: add a new argument of type driver_filter_t to bus_setup_intr()
o add an int return code to all fast handlers
o retire INTR_FAST/IH_FAST
For more info: http://docs.freebsd.org/cgi/getmsg.cgi?fetch=465712+0+current/freebsd-current
Reviewed by: many Approved by: re@
|
#
162315 |
|
15-Sep-2006 |
glebius |
Consistently use if_printf() only in interface methods: if_start, if_ioctl, if_watchdog, etc, or in functions that are used by these methods only. In all other cases use device_printf().
This also fixes several panics, when if_printf() is called before softc->ifp was initialized.
Submitted by: Alex Lyashkov <umka sevcity.net>
|
#
158471 |
|
12-May-2006 |
jhb |
Remove various bits of conditional Alpha code and fixup a few comments.
|
#
152315 |
|
11-Nov-2005 |
ru |
- Store pointer to the link-level address right in "struct ifnet" rather than in ifindex_table[]; all (except one) accesses are through ifp anyway. IF_LLADDR() works faster, and all (except one) ifaddr_byindex() users were converted to use ifp->if_addr.
- Stop storing a (pointer to) Ethernet address in "struct arpcom", and drop the IFP2ENADDR() macro; all users have been converted to use IF_LLADDR() instead.
|
#
152311 |
|
11-Nov-2005 |
ru |
Catch up with IFP2ENADDR() type change (array -> pointer).
|
#
151545 |
|
22-Oct-2005 |
imp |
Replace FreeBSD 3.x syntax (controller miibus0) with 4.x syntax (device miibus) in time for 7.0 :-)
|
#
151297 |
|
13-Oct-2005 |
ru |
In detach method, move if_free() after bus_teardown_intr().
|
#
150213 |
|
16-Sep-2005 |
ru |
Fix "struct ifnet" leaks when attach() fails in the middle, e.g. when mii_phy_probe() or bus_setup_intr() fails. For drivers that call their detach() in this case, call if_free() there to cover this case too.
|
#
150171 |
|
15-Sep-2005 |
jhb |
- Fixup locking and mark MPSAFE. - Use callout_init_mtx() and static callouts rather than timeout(). - m_getcl() in one place to simplify the code.
Tested by: Gavin Atkinson gavin dot atkinson at ury dot york dot ac dot uk MFC after: 1 week
|
#
148887 |
|
09-Aug-2005 |
rwatson |
Propagate rename of IFF_OACTIVE and IFF_RUNNING to IFF_DRV_OACTIVE and IFF_DRV_RUNNING, as well as the move from ifnet.if_flags to ifnet.if_drv_flags. Device drivers are now responsible for synchronizing access to these flags, as they are in if_drv_flags. This helps prevent races between the network stack and device driver in maintaining the interface flags field.
Many __FreeBSD__ and __FreeBSD_version checks maintained and continued; some less so.
Reviewed by: pjd, bz MFC after: 7 days
|
#
148654 |
|
02-Aug-2005 |
rwatson |
Modify device drivers supporting multicast addresses to lock if_addr_mtx over iteration of their multicast address lists when synchronizing the hardware address filter with the network stack-maintained list.
Problem reported by: Ed Maste (emaste at phaedrus dot sandvine dot ca> MFC after: 1 week
|
#
147256 |
|
10-Jun-2005 |
brooks |
Stop embedding struct ifnet at the top of driver softcs. Instead the struct ifnet or the layer 2 common structure it was embedded in have been replaced with a struct ifnet pointer to be filled by a call to the new function, if_alloc(). The layer 2 common structure is also allocated via if_alloc() based on the interface type. It is hung off the new struct ifnet member, if_l2com.
This change removes the size of these structures from the kernel ABI and will allow us to better manage them as interfaces come and go.
Other changes of note: - Struct arpcom is no longer referenced in normal interface code. Instead the Ethernet address is accessed via the IFP2ENADDR() macro. To enforce this ac_enaddr has been renamed to _ac_enaddr. - The second argument to ether_ifattach is now always the mac address from driver private storage rather than sometimes being ac_enaddr.
Reviewed by: sobomax, sam
|
#
146734 |
|
29-May-2005 |
nyan |
Remove bus_{mem,p}io.h and related code for a micro-optimization on i386 and amd64. The optimization is a trivial on recent machines.
Reviewed by: -arch (imp, marcel, dfr)
|
#
142407 |
|
24-Feb-2005 |
imp |
Fix style(9) issues with __P removal.
Noticed by: bde
|
#
142398 |
|
24-Feb-2005 |
imp |
Return BUS_PROBE_DEFAULT instead of 0.
|
#
139825 |
|
07-Jan-2005 |
imp |
/* -> /*- for license, minor formatting changes
|
#
134442 |
|
28-Aug-2004 |
rwatson |
Tag a last set of PCI network interfaces as IFF_NEEDSGIANT until they are either locked down or demonstrated MPSAFE.
|
#
129878 |
|
30-May-2004 |
phk |
Add missing <sys/module.h> includes
|
#
127135 |
|
17-Mar-2004 |
njl |
Convert callers to the new bus_alloc_resource_any(9) API.
Submitted by: Mark Santcroos <marks@ripe.net> Reviewed by: imp, dfr, bde
|
#
126966 |
|
14-Mar-2004 |
mdodd |
Announce ethernet MAC addresss in ether_ifattach().
|
#
126847 |
|
11-Mar-2004 |
mux |
Stop setting ifp->if_output to ether_output() since ether_ifattach() does it for us already.
|
#
123289 |
|
08-Dec-2003 |
obrien |
Don't use caddr_t in mchash(). Also use C99 spellings over BSD ones.
Requested by: bde,imp
|
#
122689 |
|
14-Nov-2003 |
sam |
Drop the driver lock around calls to if_input to avoid a LOR when the packets are immediately returned for sending (e.g. when bridging or packet forwarding). There are more efficient ways to do this but for now use the least intrusive approach.
Reviewed by: imp, rwatson
|
#
122678 |
|
14-Nov-2003 |
obrien |
Remove duplicate FBSDID's, move others to their right place.
|
#
122625 |
|
13-Nov-2003 |
obrien |
Try to create some sort of consistency in how the routings to find the multicast hash are written. There are still two distinct algorithms used, and there actually isn't any reason each driver should have its own copy of this function as they could all share one copy of it (if it grew an additional argument).
|
#
121816 |
|
31-Oct-2003 |
brooks |
Replace the if_name and if_unit members of struct ifnet with new members if_xname, if_dname, and if_dunit. if_xname is the name of the interface and if_dname/unit are the driver name and instance.
This change paves the way for interface renaming and enhanced pseudo device creation and configuration symantics.
Approved By: re (in principle) Reviewed By: njl, imp Tested On: i386, amd64, sparc64 Obtained From: NetBSD (if_xname)
|
#
119288 |
|
22-Aug-2003 |
imp |
Prefer new location of pci include files (which have only been in the tree for two or more years now), except in a few places where there's code to be compatible with older versions of FreeBSD.
|
#
113812 |
|
21-Apr-2003 |
imp |
Use newly minted device_is_attached rather than device_is_alive to see if attach succeeded. device_is_alive just tells us that probe succeeded. Since we were using it to do things like detach net interfaces, this caused problems when there were errors in the attach routine.
Symptoms of problem reported by: martin blapp
|
#
113609 |
|
17-Apr-2003 |
njl |
Revise attach/detach resource cleanup - Unconditionally call *_stop() if device is in the tree. This is to prevent callouts from happening after the device is gone. Checks for bus_child_present() should be added in the future to keep from touching potentially non-existent hardware in *_detach(). Found by iedowse@. - Always check for and free miibus children, even if the device is not in the tree since some failure cases could have gotten here. - Call ether_ifdetach() in the irq setup failure case - ti(4), xl(4): move ifmedia_init() calls to the beginning of attach so that ifmedia_removeall() can be unconditionally called on detach. There is no way to detect whether ifmedia has been initialized without using a separate variable (as tl(4) does). - Add comments to indicate assumptions of code path
|
#
113548 |
|
16-Apr-2003 |
mdodd |
- Remove a block of code I missed in the previous commit. - Call tl_ifmedia_upd() in tl_init() for cards with bitrate devices.
|
#
113545 |
|
16-Apr-2003 |
mdodd |
- Don't call pci_enable_io() in drivers (unless needed for resume). - Don't test memory/port status and emit an error message; the PCI bus code will do this now.
|
#
113506 |
|
15-Apr-2003 |
mdodd |
- Express hard dependencies on bus (pci, isa, pccard) and network layer (ether). - Don't abuse module names to facilitate ifconfig module loading; such abuse isn't really needed. (And if we do need type information associated with a module then we should make it explicit and not use hacks.)
|
#
113038 |
|
03-Apr-2003 |
obrien |
Use __FBSDID rather than rcsid[].
|
#
112880 |
|
31-Mar-2003 |
jhb |
Add missing ()'s so that these drivers all compile again.
Noticed by: jake Tested on: i386 (compile)
|
#
112878 |
|
31-Mar-2003 |
jhb |
If we fail to find our PCI ID in attach (this should never happen), then just return ENXIO directly instead of calling tl_detach() since that would panic since the softc mutex isn't initialized until after this check.
|
#
112872 |
|
31-Mar-2003 |
njl |
Clean up locking and resource management for pci/if_*
- Remove locking of the softc in the attach method, instead depending on bus_setup_intr being at the end of attach (delaying interrupt enable until after ether_ifattach is called) - Call *_detach directly in the error case of attach, depending on checking in detach to only free resources that were allocated. This puts all resource freeing in one place, avoiding thinkos that lead to memory leaks. - Add bus_child_present check to calls to *_stop in the detach method to be sure hw is present before touching its registers. - Remove bzero softc calls since device_t should do this for us. - dc: move interrupt allocation back where it was before. It was unnecessary to move it. This reverts part of 1.88 - rl: move irq allocation before ether_ifattach. Problems might have been caused by allocating the irq after enabling interrupts on the card. - rl: call rl_stop before ether_ifdetach - sf: call sf_stop before ether_ifdetach - sis: add missed free of sis_tag - sis: check errors from tag creation - sis: move dmamem_alloc and dmamap_load to happen at same time as tag creation - sk: remove duplicate initialization of sk_dev - ste: add missed bus_generic_detach - ti: call ti_stop before ether_ifdetach - ti: add missed error setting in ti_rdata alloc failure - vr: add missed error setting in I/O, memory mapping cases - xl: add missed error setting in I/O, memory mapping cases - xl: remove multi-level goto on attach failure - xl: move dmamem_alloc and dmamap_load to happen at same time as tag creation - Calls to free(9) are unconditional because it is valid to call free with a null pointer.
Reviewed by: imp, mdodd
|
#
111119 |
|
19-Feb-2003 |
imp |
Back out M_* changes, per decision of the TRB.
Approved by: trb
|
#
109623 |
|
21-Jan-2003 |
alfred |
Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0. Merge M_NOWAIT/M_DONTWAIT into a single flag M_NOWAIT.
|
#
106936 |
|
14-Nov-2002 |
sam |
o track either_ifattach/ether_ifdetach API changes o use if_input for input packet processing o don't strip the Ethernet header for input packets o use BPF_* macros bpf tapping o call ether_ioctl to handle default ioctl case o track vlan changes
Reviewed by: many Approved by: re
|
#
105599 |
|
21-Oct-2002 |
brooks |
Use if_printf(ifp, "blah") and device_printf(dev, "blah") instead of printf("%s%d: blah", ifp->if_name, ifp->if_xname). This eliminates the need to store the unit number in the softc.
|
#
102336 |
|
23-Aug-2002 |
alfred |
style: put return types on a line by themselves.
|
#
93818 |
|
04-Apr-2002 |
jhb |
Change callers of mtx_init() to pass in an appropriate lock type name. In most cases NULL is passed, but in some cases such as network driver locks (which use the MTX_NETWORK_LOCK macro) and UMA zone locks, a name is used.
Tested on: i386, alpha, sparc64
|
#
92739 |
|
20-Mar-2002 |
alfred |
Remove __P.
|
#
87846 |
|
14-Dec-2001 |
luigi |
Remove printf's on mbuf/cluster allocation failures. There are now equivalent and less dangerous (rate limited) messages in the mbuf allocation code.
MFC after: 3 days
|
#
79472 |
|
09-Jul-2001 |
wpaul |
Apply patch supplied by Jonathan Chen: use the correct arguments to pci_enable_io(). We need to use SYS_RES_IOPORT/SYS_RES_MEMORY instead of PCIM_CMD_PORTEN/PCIM_CMD_MEMEN.
|
#
72813 |
|
21-Feb-2001 |
wpaul |
Big round of minor updates:
- Use pci_get_powerstate()/pci_set_powerstate() in all the other drivers that need them so we don't have to fiddle with the PCI power management registers directly. - Use pci_enable_busmaster()/pci_enable_io() to turn on busmastering and PIO/memory mapped accesses. - Add support to the RealTek driver for the D-Link DFE-530TX+ which has a RealTek 8139 with its own PCI ID. (Submitted by Jason Wright) - Have the SiS 900/National DP83815 driver be sure to disable PME mode in sis_reset(). This apparently fixes a problem on some motherboards where the DP83815 chip fails to receive packets. (Submitted by Chuck McCrobie <mccrobie@cablespeed.com>)
|
#
72084 |
|
06-Feb-2001 |
phk |
Convert if_multiaddrs from LIST to TAILQ so that it can be traversed backwards in the three drivers which want to do that.
Reviewed by: mikeh
|
#
71999 |
|
04-Feb-2001 |
phk |
Mechanical change to use <sys/queue.h> macro API instead of fondling implementation details.
Created with: sed(1) Reviewed by: md5(1)
|
#
71962 |
|
03-Feb-2001 |
phk |
Use LIST_FOREACH() to traverse ifp->if_multiaddrs list, instead of <sys/queue.h> implementation details.
Created with: /usr/sbin/sed Reviewed with: /sbin/md5
|
#
71228 |
|
18-Jan-2001 |
bmilekic |
Implement MTX_RECURSE flag for mtx_init(). All calls to mtx_init() for mutexes that recurse must now include the MTX_RECURSE bit in the flag argument variable. This change is in preparation for an upcoming (further) mutex API cleanup. The witness code will call panic() if a lock is found to recurse but the MTX_RECURSE bit was not set during the lock's initialization.
The old MTX_RECURSE "state" bit (in mtx_lock) has been renamed to MTX_RECURSED, which is more appropriate given its meaning.
The following locks have been made "recursive," thus far: eventhandler, Giant, callout, sched_lock, possibly some others declared in the architecture-specific code, all of the network card driver locks in pci/, as well as some other locks in dev/ stuff that I've found to be recursive.
Reviewed by: jhb
|
#
69583 |
|
04-Dec-2000 |
wpaul |
Initialize/grab the mutex earlier in the attach phase, so that bailing out to the fail: label where we release/destroy the mutex will work without exploding.
|
#
68216 |
|
01-Nov-2000 |
wpaul |
Fix a couple of cases where I tried to release the I/O space resource twice (once as as an I/O space resource and once as an IRQ resource). There was a problem with this in if_rl too, which is how I found it.
|
#
67164 |
|
15-Oct-2000 |
phk |
Remove unneeded #include <machine/clock.h>
|
#
67089 |
|
13-Oct-2000 |
wpaul |
Use device_get_nameunit(dev) as the mutex string when calling mtx_init() instead of hard-coded string constant. Also remember to do the mutex changes to the ste driver, which I forgot in the first commit.
|
#
67087 |
|
13-Oct-2000 |
wpaul |
First round of converting network drivers from spls to mutexes. This takes care of all the 10/100 and gigE PCI drivers that I've done. Next will be the wireless drivers, then the USB ones. I may pick up some stragglers along the way. I'm sort of playing this by ear: if anyone spots any places where I've screwed up horribly, please let me know.
|
#
63090 |
|
13-Jul-2000 |
archie |
Make all Ethernet drivers attach using ether_ifattach() and detach using ether_ifdetach().
The former consolidates the operations of if_attach(), ng_ether_attach(), and bpfattach(). The latter consolidates the corresponding detach operations.
Reviewed by: julian, freebsd-net
|
#
61041 |
|
28-May-2000 |
peter |
Use the correct register name. s/PCI_COMMAND_STATUS_REG/PCIR_COMMAND/
|
#
60536 |
|
14-May-2000 |
archie |
Move code to handle BPF and bridging for incoming Ethernet packets out of the individual drivers and into the common routine ether_input(). Also, remove the (incomplete) hack for matching ethernet headers in the ip_fw code.
The good news: net result of 1016 lines removed, and this should make bridging now work with *all* Ethernet drivers.
The bad news: it's nearly impossible to test every driver, especially for bridging, and I was unable to get much testing help on the mailing lists.
Reviewed by: freebsd-net
|
#
59758 |
|
29-Apr-2000 |
peter |
Depend on miibus.
Note that if_aue doesn't strictly depend on usb because it uses the method interface for calls rather than using internal symbols, and because it's a child driver of usb and therefore will not try and do anything unless the parent usb code is loaded at some point. if_aue does strictly depend on miibus as it will fail to link if it is missing.
|
#
56060 |
|
15-Jan-2000 |
wpaul |
Fix the tl driver so it doesn't run off the end of the RX descriptor list and panic in out of mbufs condition.
|
#
51657 |
|
25-Sep-1999 |
wpaul |
Change contigmalloc() lower memory bound from 1MB to 0 to improve chances of allocations succeeding on systems with small amounts of RAM.
Pointed out by: bde
|
#
51583 |
|
23-Sep-1999 |
wpaul |
As suggested by phk, unconditionalize BPF support in these drivers. Since there are stubs compiled into the kernel if BPF support is not enabled, there aren't any problems with unresolved symbols. The modules in /modules are compiled with BPF support enabled anyway, so the most this will do is bloat GENERIC a little.
|
#
51533 |
|
22-Sep-1999 |
wpaul |
Tweak these for what I hope is the last time: change the DRIVER_MODULE() declaration for the interface driver from "foo" to "if_foo" but leave the declaration for the miibus attached to the interface driver alone. This lets the internal module name be "if_foo" while still allowing the miibus instances to attach to "foo."
This should allow ifconfig to autoload driver modules again without breaking the miibus attach.
|
#
51473 |
|
20-Sep-1999 |
wpaul |
Un-do the changes to the DRIVER_MODULE() declarations in these drivers. This whole idea isn't going to work until somebody makes the bus/kld code smarter. The idea here is to change the module's internal name from "foo" to "if_foo" so that ifconfig can tell a network driver from a non-network one. However doing this doesn't work correctly no matter how you slice it. For everything to work, you have to change the name in both the driver_t struct and the DRIVER_MODULE() declaration. The problems are:
- If you change the name in both places, then the kernel thinks that the device's name is now "if_foo", so you get things like:
if_foo0: <FOO ethernet> irq foo at device foo on pcifoo if_foo0: Ethernet address: foo:foo:foo:foo:foo:foo
This is bogus. Now the device name doesn't agree with the logical interface name. There's no reason for this, and it violates the principle of least astonishment.
- If you leave the name in the driver_t struct as "foo" and only change the names in the DRIVER_MODULE() declaration to "if_foo" then attaching drivers to child devices doesn't work because the names don't agree. This breaks miibus: drivers that need to have miibuses and PHY drivers attached never get them.
In other words: damned if you do, damned if you don't.
This needs to be thought through some more. Since the drivers that use miibus are broken, I have to change these all back in order to make them work again. Yes this will stop ifconfig from being able to demand load driver modules. On the whole, I'd rather have that than having the drivers not work at all.
|
#
51455 |
|
20-Sep-1999 |
wpaul |
Grrr. Okay, changing the devnames was a bad idea. Put them back the way they were.
|
#
51453 |
|
20-Sep-1999 |
wpaul |
Fix the strings in the driver_t structs so that they match the new names in the DRIVER_MODULES() declarations. *sigh*
|
#
51450 |
|
20-Sep-1999 |
obrien |
Goofed and didn't change the second DRIVER_MODULE() linking these with the miibus.
Noticed by: wpaul
|
#
51446 |
|
20-Sep-1999 |
obrien |
Change the name we register with DRIVER_MODULE() to include the leading "if_".
Reviewed by: msmith, wpaul
|
#
51439 |
|
19-Sep-1999 |
wpaul |
Make some small performance tweaks to the tl driver. This should hopefully close PR #13757, however I'm waiting on user feedback before declaring the PR officially closed. Among other things, this improves UDP transmit performance, and tx underruns are now detected and the TX start threshold adjusted accordingly.
|
#
51089 |
|
08-Sep-1999 |
peter |
Add a pointer to "controller miibus0" for people who will not read the commit messages or GENERIC and insist on running -CURRENT. It probably won't work, but it's worth a try.
|
#
50477 |
|
27-Aug-1999 |
peter |
$Id$ -> $FreeBSD$
|
#
50468 |
|
27-Aug-1999 |
wpaul |
Make some cleanups related to miibus.
|
#
50462 |
|
27-Aug-1999 |
wpaul |
Convert the ThunderLAN driver to miibus. This took me a while because I had to get the ML 6692 PHY driver working correctly, which is harder than it sounds. "Bitrate" ThunderLAN devices should still be supported (i.e the older 10Mbps Netflex 3/P, which use the TNETE110 chip that has no MII support). The ThunderLAN has an internal PHY which makes things a little complicated, but these are the basic rules:
- For devices with just the ThunderLAN, the internal PHY is used to provide 10baseT, and 10base5/10baseT support. Autonegotiation will work, but only with 10baseT links. The only thing that really gets negotiated is whether the link is full or half duplex.
- For devices with the ThunderLAN and an external 10/100 PHY (like the Compaq Netelligent 100Mbps cards, or the internal Netflex 3/P with 100Mbps upgrade daughter card), the external PHY is used for 10baseT and 100baseTX modes. The internal PHY is still used to support 10base5/10base2, though you have to select them manual with ifconfig.
- For devices with the ThunderLAN and the ML6692 PHY, both the internal and external PHYs are used, though it will appear as though the 6692 PHY will be used to support 10baseT and 100baseTX modes. In reality, the internal PHY will be used for 10baseT, but this fact will be hidden from the user. The 10base5/10base2 modes can also be selected manually as with above.
|
#
49010 |
|
23-Jul-1999 |
wpaul |
Some more small newbus cleanups. Remember to free all resources in case of failures in foo_attach(), simplify iospace/memspace things a little.
|
#
48999 |
|
22-Jul-1999 |
wpaul |
Well, it seems that loading a PCI driver module after the system has been booted works too -- very neat. However I don't want the system to stop for 5 seconds when the MII autoprobe is triggered in the xl and tl drivers since that's lame. Instead, only use the hard delay when we've been cold booted. If not, use the timeout mechanism instead. (The SysKonnect driver doesn't use the same autonegotiation scheme, so no change is required there.)
|
#
48992 |
|
22-Jul-1999 |
wpaul |
Convert the ThunderLAN driver to newbus. Also add splimp() protection to tl_stats_update().
|
#
48645 |
|
06-Jul-1999 |
des |
Rename bpfilter to bpf.
|
#
48443 |
|
02-Jul-1999 |
peter |
Change the cast in pci_map_port() from u_short * to pci_port_t * so it compiles cleanly on the Alpha. (On the alpha, the port type is an int, not a short). Cast a couple of pointers to ints via 'uintptr_t' rather than 'unsigned int' since uintptr_t is long (64 bit) on Alpha, as are pointers.
|
#
46813 |
|
09-May-1999 |
peter |
Simplify the COMPAT_PCI_DRIVER/DATA_SET hack. We can add: #define COMPAT_PCI_DRIVER(name,data) DATA_SET(pcidevice_set,data) .. to 2.2.x and 3.x if people think it's worth it. Driver writers can do this if it's not defined. (The reason for this is that I'm trying to progressively eliminate use of linker_sets where it hurts modularity and runtime load capability, and these DATA_SET's keep getting in the way.)
|
#
46568 |
|
06-May-1999 |
peter |
Add sufficient braces to keep egcs happy about potentially ambiguous if/else nesting.
|
#
46561 |
|
06-May-1999 |
wpaul |
Tweak the Macronix driver to hopefully make it more reliable:
- Change to the same transmit scheme as the PNIC driver. - Dynamically set the cache alignment, and set burst size the same as the PNIC driver in mx_init(). - Enable 'store and forward' mode by default. This is the slowest option and it does reduce 100Mbps performance somewhat, but it's the most reliable setting I can find. I'm more interested in having the driver work reliably than trying to squeeze the best performance out of it. The reason I'm doing this is that on *some* systems you may see a lot of transmit underruns (which I can't explain: these are *fast* test systems) and these errors seem to cause unusual and decidedly non-tulip-like behavior. In normal 10Mbps mode, performance is fine (you can easily saturate a 10Mbps link).
Also tweak some of the other drivers:
- Increase the size of the TX ring for the Winbond, ASIX, VIA Rhine and PNIC drivers. - Set a larger value for ifq_maxlen in the ThunderLAN driver. The setting of TL_TX_LIST_CNT - 1 is too low (the ThunderLAN driver only allocates 20 transmit descriptors, and I don't want to fiddle with that now because the ThunderLAN's descriptor structure is an oddball size compared to the others).
|
#
46024 |
|
24-Apr-1999 |
peter |
Use COMPAT_PCI_DRIVER() for registration if it exists. This shouldn't hurt the driver portability to 3.x too much for where drivers are shared.
|
#
45166 |
|
31-Mar-1999 |
wpaul |
Insert ifmedia_set() that I forgot and put in the vtophys() hack for the alpha. Now the ThunderLAN driver works on the alpha (both my sample cards check out.) Update the alpha GENERIC config to include ThunderLAN driver now that I've tested it.
|
#
45155 |
|
30-Mar-1999 |
wpaul |
Various updates for the ThunderLAN driver:
- When trying to map ports, if mapping TL_PCI_LOIO or TL_PCI_LOMEM fails, try mapping the other one. Apparently, some ThunderLAN parts swap these two registers while others don't.
- Add support for bitrate (non-MII) PHYs. If no MII-based PHY is found, program the chip for bitrate mode. This is required for the TNETE110 part, which doesn't have MII support. (It's also obsolete, but there are still some people out there who have them.) With this change and the change above, the Compaq Netflex-3/P 10baseT/BNC board works correctly. (Thanks to Matthew Dodd for getting me one of these cards.)
- Convert to bus_space_foo() for register accesses.
- Add changes to support FreeBSD/Alpha. I still have to actually test this in my Alpha box so I'm not going to update /sys/alpha/conf/GENERIC yet.
|
#
43515 |
|
01-Feb-1999 |
wpaul |
Remember to initialize ifp->if_snd.ifq_maxlen.
|
#
43235 |
|
26-Jan-1999 |
wpaul |
When selecting the correct EEPROM offset to use for probing the station address, account for cards which report the Texas Instruments PCI vendor ID in addition to Compaq and Olicom. (I don't actually have a card that reports the TI vendor/device ID, but it appears that some Racore adapters work this way, and failing to account for it when we have the ID listed in the supported devices list is a bug.)
|
#
42146 |
|
29-Dec-1998 |
wpaul |
Fix the tl_start() routine; sometimes the tl_tx_tail pointer was not being updated correctly.
|
#
41771 |
|
14-Dec-1998 |
dillon |
probe function changed from returning char * to const char *.
|
#
41656 |
|
10-Dec-1998 |
wpaul |
Silence gcc -Wall -ansi -pedantic.
Pointed out by: Eivind
|
#
41591 |
|
07-Dec-1998 |
archie |
The "easy" fixes for compiling the kernel -Wunused: remove unreferenced static and local variables, goto labels, and functions declared but not defined.
|
#
41526 |
|
05-Dec-1998 |
wpaul |
Add sanity check to foo_start() routines: in the unlikely (though apparently possible) event that the transmit start routine is called with and empty if_snd queue, bail out instead of dereferencing unilitialized transmit list pointers and panicking.
|
#
40795 |
|
31-Oct-1998 |
wpaul |
Increase the size of the tx and rx rings from 10 to 20 descriptors and increase the tx interrupt threshold to 4. This fixes performance problems on slower systems.
Also fix a mind-o in the rx ring init routine: I used the TX constant instead of the RX. This isn't a problem as long as the rings are the same size, but if they aren't hijinx will ensue.
|
#
40065 |
|
08-Oct-1998 |
wpaul |
Correctly update the tail pointer of the transmit queue in tl_start() (one-liner). I have yet to actually encounter any problems due to this bug, but why take chances.
|
#
39957 |
|
04-Oct-1998 |
wpaul |
Force the ThunderLAN driver to use PIO mode by default instead of memory mapped mode. There are some laptop docking stations with built-in tlan chips where memory mapped mode doesn't work correctly.
Pointed out by: jmb
|
#
39627 |
|
24-Sep-1998 |
wpaul |
Small tweak: force another reset of the adapter after probing for all the PHYs in tl_attach(). This is mainly to suck away any possible stray interrupts.
This prevents an intermittent problem on some systems where the adapter probes correctly but yields a device timeout (and possible subsequent adapter check) when configured. When I originally tested the driver, I ifconfig'ed the interface after the system had already been booted and didn't notice any problems, but when configuring the interface immediately at startup, it would occasionally timeout and hang, until an adapter check interrupt came along and reset things again. I'm not exactly sure if this is a general problem of just something peculiar to this hardware (there are three devices, including the tlan, all on IRQ 11) but the extra reset shouldn't hurt anything. (It works fine with my 100Mbps Olicom adapter too.)
Thanks to Mark Taylor from Cybernet (mtaylor@cybernet.com) for allowing me remote access to a Compaq system for debugging purposes.
|
#
39583 |
|
23-Sep-1998 |
wpaul |
Overhaul the ThunderLAN driver. This update includes the following changes:
- Cleaned up register access macros so that they work like the XL driver macros (you can switch from PIO to memory-mapped mode using a single #define -- default is still memory mapped mode). The old 'struct overlayed onto the memory mapped register space' cruft has been removed.
- Improved multicast filter code. The ThunderLAN has four entry perfect filter table in addition to the 64-bit hash table: we need one of the perfect filter entries for the station address, but we can use the other three for multicast filtering. We arrange to put the first three multicast group addresses in the perfect filter slots so that commonly joined groups like the all hosts group and the all routers group can be filtered without using up bits in the hash table.
Note: in FreeBSD 3.0, multicast groups are stored in a doubly linked list, however new entries are added at the head of the list (thereby pushing existing entries down towards the tail). We want to update the filter starting from the oldest entry to the newest since the all hosts group is always joined first. This means we really want to start from the tail of the list, not the head, but to find the tail we first have to traverse the list all the way to the end and then add entries working backwards. This is a bit of a kludge and could be inefficient if the list is long.
- Cleaned up autonegotiation code: tl_autoneg() wasn't always setting modes correctly.
- Cleaned up ifmedia update and status routines as well.
- Added tl_hardreset() routine to initialize the internal PHY according to the ThunderLAN manual.
- Did away with the kludge where PHYs were treated as separate logical interfaces. This didn't really work, especially in the case of the newer Olicom 2326 adapters which use a Micro Linear ML6692 PHY which provides only 100Mbps support, relying on the internal PHY for 10Mbps support (both PHYs share the RJ45 port, with the 6692 doing all the autonegotiation work). This kludge resulted from my misunderstanding of the operation of the Compaq Netelligent Dual Port card (the tlan manual mentions multiple channels, but in a different context; this got me a little confused). The driver has been reported to work correctly with the dual port card.
- Added dio_getbit/dio_setbit/dio_read/dio_write functions which carefully set the ThunderLAN's indirectly accessed internal registers. This makes the EEPROM reading code more reliable.
Hopefully I won't have to touch this again before 3.0 goes out the door. I plan to import the 2.2.x version sometime this week.
Approved-by: jkh
|
#
38065 |
|
03-Aug-1998 |
wpaul |
Fix this thing to work properly with multiple tlan adapters; increment unit count correctly.
Problem reported by Larry Baird <lab@gta.com>.
|
#
38030 |
|
02-Aug-1998 |
wpaul |
Updates for the ThunderLAN driver:
- probe for PHYs by checking the BMSR (phy status) register instead of the vendor ID register.
- fix the autonegotiation routine so that it figures out the autonegotiated modes correctly.
- add tweaks to support the Olicom OC-2326 now that I've actually had a chance to test one
o Olicom appears to encode the ethernet address in the EEPROM in 16-bit chunks in network byte order. If we detect an Olicom card (based on the PCI vendor ID), byte-swap the station address accordingly.
XXX The Linux driver does not do this. I find this odd since the README from the Linux driver indicates that patches to support the Olicom cards came from somebody at Olicom; you'd think if anyone would get that right, it'd be them. Regardless, I accepted the word of the disgnoatic program that came bundled with the card as gospel and fixed the attach routine to make the station address match what it says.
o The version of the 2326 card that I got for testing is a strange beast: the card does not look like the picture on the box in which it was packed. For one thing, the picture shows what looks like an external NS 83840A PHY, but the actual card doesn't have one. The card has a TNETE100APCM chip, which appears to have not only the usual internal tlan 10Mbps PHY at MII address 32, but also a 10/100 PHY at MII address 0. Curiously, this PHY's vendor and device ID registers always return 0x0000. I suspect that this is a mutant version of the ThunderLAN chip with 100Mbps support. This combination behaves a little strangely and required the following changes:
- The internal PHY has to be enabled in tl_softreset(). - The internal PHY doesn't seem to come to life after detecting the 100Mbps PHY unless it's reset twice. - If you want to use 100Mbps modes, you have to isolate the internal PHY. - If you want to use 10Mbps modes, you have to un-isolate the internal PHY.
The latter two changes are handled at the end of tl_init(): if the PHY vendor ID is 0x0000 (which should not be possible if we have a real external PHY), then tl_init() forces the internal PHY's BMCR register to the proper values.
|
#
37626 |
|
13-Jul-1998 |
wpaul |
Declare pointers to CSR register space to be volatile. This seems to cure the problems I was having with interrupts not being acknowledged on time. This fixes a problem I observed where starting two ping -f processes at 10Mbps would cause an adapter check due to TX GO commands being issued before TXEOC interrupts were being acked.
Also fix a small problem with tl_start(): the mechanism I was using to queue new packets onto the TX chain was bogus.
Change adapter check handler so that it resets card state after tl_softreset() is stored.
Moved all EEPROM-related macro definitions into if_tlreg.h.
Don't allow an autoneg session to start until after the TX queue has been drained, and don't transmit anything until after the autoneg session is complete.
Also add support for two more Compaq ThunderLAN-based cards, and three cards from Olicom which also use the ThunderLAN chip. The only thing different about the Olicom cards is that they store the station address at a different location within the EEPROM.
|
#
37618 |
|
13-Jul-1998 |
bde |
Fixed printf format errors (only 1 left in GENERIC now).
|
#
37094 |
|
21-Jun-1998 |
bde |
Removed unused includes.
|
#
36735 |
|
07-Jun-1998 |
dfr |
This commit fixes various 64bit portability problems required for FreeBSD/alpha. The most significant item is to change the command argument to ioctl functions from int to u_long. This change brings us inline with various other BSD versions. Driver writers may like to use (__FreeBSD_version == 300003) to detect this change.
The prototype FreeBSD/alpha machdep will follow in a couple of days time.
|
#
36501 |
|
31-May-1998 |
wpaul |
Add a short delay in the read loop in tl_eeprom_getbyte(). On some systems, you have to allow the delay or else you end up misreading some of the bits.
Patch provided by: Yoshihiko Someya <zb9y-smy@asahi-net.or.jp>
|
#
36464 |
|
29-May-1998 |
wpaul |
Don't program the antonegotiation advertisement register in tl_setmode(). I had a reason for doing this, but it violates the principle of least astonishment. (At some point I may put this back but attach it to one of the LINK flags so the behavior can be toggled on and off.)
Also replace my tl_calchash() with a much less disgusting and substantially smaller one supplied by Bill Fenner.
|
#
36400 |
|
26-May-1998 |
wpaul |
Ignore 'invalid' interrupts that occur while the interface is down. These are probably generated by other PCI devices sharing the TLAN's interrupt. The programmer's guide says to simply re-enable interrupts and return if one of these is detected.
Prompted by bug report from: Bill Fenner
|
#
36317 |
|
23-May-1998 |
wpaul |
Fix a mind-o in tl_setmulti(): when setting a bit in the upper 32 bits of the 64-bit hash table, we have to use a 32-bit shift, not 31.
Pointed out by: Bill Fenner
|
#
36302 |
|
22-May-1998 |
wpaul |
Remove 2.2.x compatibility code and #ifdefs. Once the shakedown period in -current is over, I'll put a 2.2.x specific version in the RELENG_2_2 branch. If somebody wants a 2.2 version of this driver now, they can check out the previous version from CVS or ask me via e-mail.
Gee people, I didn't mean to stir up such a controversy. I just wanted to make sure I could get this thing to work with both kernel versions and didn't want to have to maintain two separate copies. All ya hadda do was ask. :)
|
#
36282 |
|
21-May-1998 |
jkh |
Yeargh! After all that, I forgot to remove the #include.
|
#
36281 |
|
21-May-1998 |
jkh |
Don't use __FreeBSD_version explicitly - none of the other drivers here do and it also blows up in building GENERIC during a release build if you try and include <osreldate.h> (which shot my SNAP dead - argh!). Use __FreeBSD__ instead.
|
#
36270 |
|
21-May-1998 |
wpaul |
Add Texas Instruments TNET100 'ThunderLAN' PCI NIC driver to the tree. This driver supports the following cards/integrated ethernet controllers:
Compaq Netelligent 10, Compaq Netelligent 10/100, Compaq Netelligent 10/100, Compaq Netelligent 10/100 Proliant, Compaq Netelligent 10/100 Dual Port, Compaq NetFlex-3/P Integrated, Compaq NetFlex-3/P Integrated, Compaq NetFlex 3/P w/ BNC, Compaq Deskpro 4000 5233MMX.
It should also support Texas Instruments NICs that use the ThunderLAN chip, though I don't have any to test. If you've got a card that uses the ThunderLAN chip but isn't listed in the PCI vendor/product list in if_tl.c, try adding it and see what happens.
The driver supports any MII compliant PHY at 10 or 100Mbps speeds in full or half duplex. (Those I've personally tested are the National Semiconductor DP83840A (Prosignia server), the Level 1 LXT970 (Deskpro desktop), and the ThunderLAN's internal 10baseT PHY.) Autonegotiation, hardware multicast filtering, BPF and ifmedia support are included.
This chip is pretty fast; Prosignia servers with NCR SCSI, ThunderLAN ethernet and FreeBSD make for a nice combination.
|