Commit Graph

491 Commits

Author SHA1 Message Date
yongari
f47c7431de Fix off by one error in mbuf access. Previously it caused panic.
While I'm here use NULL to compare mbuf pointer and add additional
check for zero length mbuf before accessing the mbuf.

PR:	kern/162932
2011-12-05 18:10:43 +00:00
marius
d0f32374e6 - Remove attempts to implement setting of BMCR_LOOP/MIIF_NOLOOP
(reporting IFM_LOOP based on BMCR_LOOP is left in place though as
  it might provide useful for debugging). For most mii(4) drivers it
  was unclear whether the PHYs driven by them actually support
  loopback or not. Moreover, typically loopback mode also needs to
  be activated on the MAC, which none of the Ethernet drivers using
  mii(4) implements. Given that loopback media has no real use (and
  obviously hardly had a chance to actually work) besides for driver
  development (which just loopback mode should be sufficient for
  though, i.e one doesn't necessary need support for loopback media)
  support for it is just dropped as both NetBSD and OpenBSD already
  did quite some time ago.
- Let mii_phy_add_media() also announce the support of IFM_NONE.
- Restructure the PHY entry points to use a structure of entry points
  instead of discrete function pointers, and extend this to include
  a "reset" entry point. Make sure any PHY-specific reset routine is
  always used, and provide one for lxtphy(4) which disables MII
  interrupts (as is done for a few other PHYs we have drivers for).
  This includes changing NIC drivers which previously just called the
  generic mii_phy_reset() to now actually call the PHY-specific reset
  routine, which might be crucial in some cases. While at it, the
  redundant checks in these NIC drivers for mii->mii_instance not being
  zero before calling the reset routines were removed because as soon
  as one PHY driver attaches mii->mii_instance is incremented and we
  hardly can end up in their media change callbacks etc if no PHY driver
  has attached as mii_attach() would have failed in that case and not
  attach a miibus(4) instance.
  Consequently, NIC drivers now no longer should call mii_phy_reset()
  directly, so it was removed from EXPORT_SYMS.
- Add a mii_phy_dev_attach() as a companion helper to mii_phy_dev_probe().
  The purpose of that function is to perform the common steps to attach
  a PHY driver instance and to hook it up to the miibus(4) instance and to
  optionally also handle the probing, addition and initialization of the
  supported media. So all a PHY driver without any special requirements
  has to do in its bus attach method is to call mii_phy_dev_attach()
  along with PHY-specific MIIF_* flags, a pointer to its PHY functions
  and the add_media set to one. All PHY drivers were updated to take
  advantage of mii_phy_dev_attach() as appropriate. Along with these
  changes the capability mask was added to the mii_softc structure so
  PHY drivers taking advantage of mii_phy_dev_attach() but still
  handling media on their own do not need to fiddle with the MII attach
  arguments anyway.
- Keep track of the PHY offset in the mii_softc structure. This is done
  for compatibility with NetBSD/OpenBSD.
- Keep track of the PHY's OUI, model and revision in the mii_softc
  structure. Several PHY drivers require this information also after
  attaching and previously had to wrap their own softc around mii_softc.
  NetBSD/OpenBSD also keep track of the model and revision on their
  mii_softc structure. All PHY drivers were updated to take advantage
  as appropriate.
- Convert the mebers of the MII data structure to unsigned where
  appropriate. This is partly inspired by NetBSD/OpenBSD.
- According to IEEE 802.3-2002 the bits actually have to be reversed
  when mapping an OUI to the MII ID registers. All PHY drivers and
  miidevs where changed as necessary. Actually this now again allows to
  largely share miidevs with NetBSD, which fixed this problem already
  9 years ago. Consequently miidevs was synced as far as possible.
- Add MIIF_NOMANPAUSE and mii_phy_flowstatus() calls to drivers that
  weren't explicitly converted to support flow control before. It's
  unclear whether flow control actually works with these but typically
  it should and their net behavior should be more correct with these
  changes in place than without if the MAC driver sets MIIF_DOPAUSE.

Obtained from:	NetBSD (partially)
Reviewed by:	yongari (earlier version), silence on arch@ and net@
2011-05-03 19:51:29 +00:00
mdf
8045b08e4d sysctl(9) cleanup checkpoint: amd64 GENERIC builds cleanly.
Commit the rest of the devices.
2011-01-12 19:53:56 +00:00
marius
ac757f20dd 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
2010-10-15 15:00:30 +00:00
imp
728fefccde On second thought, we need to force 16-bit mode 2010-08-25 02:09:07 +00:00
imp
40ea18d207 Prodded by Yongari, add support for Holtek HT80232. Add the device
ID, plus the ability to force '16-bit mode' which really means NE-2000
mode.  Other open source drivers suggest that the Holtek misbehaves if
you allow the 8-bit probe.  Also, all of the PCI chips emulate
NE-2000ish cards, so always force 16-bit mode for memory transfers.

PR:		84202 (patch not used)
2010-08-25 02:03:48 +00:00
yongari
42ab9c39ce Add PNP id for Compex RL2000.
I'm not sure whether adding this logical id is correct or not
because Compex RL2000 is in the list of supported hardware list.
I guess the Compex RL2000 could be PCI variant while the controller
in question is ISA controller. It seems PNP compat id didn't match
or it had multiple compat ids so isa_pnp_probe() seemed to return
ENOENT.

PR:	kern/80853
2010-08-24 18:17:40 +00:00
yongari
6f3ab54839 Fix a possible unaligned access to savebyte array.
PR:	kern/122195
2010-08-23 21:40:03 +00:00
sobomax
213eac1f2c Add new tunable 'net.link.ifqmaxlen' to set default send interface
queue length. The default value for this parameter is 50, which is
quite low for many of today's uses and the only way to modify this
parameter right now is to edit if_var.h file. Also add read-only
sysctl with the same name, so that it's possible to retrieve the
current value.

MFC after:	1 month
2010-05-03 07:32:50 +00:00
jhb
081b0ae5b0 Use a private callout timer to drive the transmit watchdog instead of using
if_watchdog and if_timer.  The driver already contained an optional stats
timer that individual attachments could use to provide a 'tick' event.  The
stats timer only ran if the tick function pointer was non-NULL and the
attachment's tick routine had to call callout_reset(), etc.  Now the driver
always schedules a stat timer and manages the callout_reset() internally.
This timer is used to drive the watchdog and will also call the attachment's
'tick' handler if one is provided.

Tested by:	WATANABE Kazuhiro
2009-11-17 14:23:09 +00:00
rwatson
be5740a255 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
2009-06-26 11:45:06 +00:00
imp
88921bda01 ifp->if_softc is managed entirely by the driver. We never set it to
NULL or change it.  We initialize it before we set if_ioctl.  It can
therefore never be NULL, and most other drivers don't bother with this
sanity check.
2009-05-13 14:43:26 +00:00
imp
bfd5362e96 Add Surecom EP-427X. 2009-04-24 17:28:12 +00:00
imp
d9f29f24a6 A couple of older Melco cards that missed the transition to newcard 2009-04-22 16:51:01 +00:00
imp
f5200d4262 Add Billionton LNT10TB 2009-04-22 15:57:22 +00:00
imp
f6a24b1488 Add a few more models of AMBICOM cards from data from linux driver and
pccard.conf.
2009-04-22 15:13:20 +00:00
imp
e39b5e087d These were a placeholder and don't belong here. Remove them. 2009-04-22 15:01:08 +00:00
imp
924e20c37b Kill stray bootverbose debug tool.
Submitted by:	juli@
2009-04-22 06:33:26 +00:00
imp
9f03ea6775 Turns out the code improvements I did for the TC5299J support were
anti-improvements and broke support for this part.  Revert the part of
the improvement at fault.
2009-04-22 06:30:24 +00:00
imp
dfdb087397 Sometimes we can call ed_detach() before the mtx has been initialized.
Avoid it if it hasn't been initialized.
2009-04-20 15:19:54 +00:00
imp
dce30a548c Cleanup resource allocation code a bit. Store the rids on the
resources rather than on the softc.  When we allocate resources for PC
Card, if we only get 16 ports, try again to get the others.
2009-04-20 01:19:59 +00:00
imp
1b4076a052 Make sure that the data in the ROM with a valid signature isn't all
0's.  At least one PC Card ASIC does this...
2009-04-18 04:45:02 +00:00
imp
f074d448cb Add GVP NIC 2000P and New Media Livewire. Also New Media LanSurfer
doesn't have a function type of network, so add a quirk for that...
2009-04-18 04:37:53 +00:00
imp
fa43940cbb Establish the interrupt handler AFTER we successfully attach. We need
to do this in case we have a shared interrupt that fires during the
attach process....
2009-04-18 03:10:28 +00:00
imp
f2f5ef69b6 Remove debug write accidentally left in. 2009-04-18 03:02:44 +00:00
imp
6dc80f8815 Don't specify a hint, since it isn't needed. 2009-04-10 18:46:46 +00:00
imp
96241b5a9b Fix comment
Submitted by:	danfe@
2009-04-10 17:34:30 +00:00
imp
0bbc614d94 Improvements for TC5299J MII support. 2009-04-10 16:12:00 +00:00
imp
36ea3abd82 The D-Link DE-650 isn't tagged as a network card, so allow it to
attach anyway.
Add a comment about a 'common' mfg/prod pair that's used in a very
large array of different cards.
2009-04-10 15:33:47 +00:00
imp
8fd508e987 Fix some comments. 2009-04-10 15:30:19 +00:00
imp
0ab5dccb30 No need to check for chip type here. 2009-04-10 15:18:03 +00:00
imp
c17f84e6b8 More chip types, and fix a comment. 2009-04-07 17:06:06 +00:00
imp
74bdada627 Fix a comment to match the code. 2009-04-07 16:15:59 +00:00
imp
22f869fd65 Remove DL10019 workaround, since the code it calls isn't quite ready. 2009-04-07 15:44:50 +00:00
imp
7fcd8ddb86 Move tick to end of file for better code references. 2009-04-07 15:43:34 +00:00
imp
fc993203a0 The DL100xx cards have 24k of packet memory, not 16k. Use it for them
and update comments about original patches doing this and it not
working.  It works for both the DL10019 and DL10022 based cards that I
have.  It really helps the DL10019 cards, since they were using 8k
instead of the normal 16k that regular NE-2000 cards help.

# Note to self: need to provide a common routine to setup memory
# parameters.
2009-04-07 15:40:38 +00:00
imp
71fd69d9e5 Apply generic media stuff to pccard case too, when we aren't using miibus
for this.
2009-04-07 15:36:02 +00:00
imp
baab46d5cc Minor fixes to comments about media autoselect. 2009-04-07 15:34:26 +00:00
imp
9d62ffa0f2 Provide a generic ifmedia set of routines as a fallback. The
DP8390-based cards have no generic way of reporting status of the link
or setting the media type.  Some specific versions of these cards do,
however, allow for this, and we already support some of them.  Make
the 'ed' experience more uniform by providing "autoselect" as the
meida and status "active" always.  This won't affect the chips that
provide more specific details.
2009-04-07 05:41:38 +00:00
imp
fda8fbfa9c Remove more debug... 2009-04-03 02:28:11 +00:00
imp
70d654efaf Retire two flags that haven't been used since OLDCARD was retired
(well, since before OLDCARD was retired, since I removed their use
somewhat before that).
2009-04-02 19:27:56 +00:00
imp
2742d967dd Kill debug that crept in. 2009-04-02 18:11:21 +00:00
imp
bc9d8e5730 Minor tweaks in the names to match the chips more closely. 2009-04-02 18:02:00 +00:00
imp
08539c697d Minor DLINK DL100xx support tweaks:
The DIROUT bit difference between the 19 and 22 is annoying.  We can
set both bits on both parts without ill effect.  Use this trick to
simplify the code.

The DELAYS in the MII bus bit-bang code for the DL100xx parts aren't
needed.  Eliminate them.
2009-04-02 17:15:49 +00:00
imp
f855ef0e53 The AX88190 has 64k of external SRAM, of which 62k can be used for
packet data.  However, the AX88190A moves this on-chip and reduces it
to the more traditional 16k from 16k-32k.  The AX88790 follows the
'190A.  Probe memory above 32k to see which flavor of the '190 we have
and use the extra memory if we have it.

Eliminate the kludgy read eeprom for the ID code.  It really is just a
memory read at location 0x400, so just use that instead.  Makes the
code easier to understand as well as eliminates some magic numbers.
2009-04-02 17:08:54 +00:00
imp
d14c3edf27 Force an autonegotiation at attach time for all the attached PHYs for
ed cards.  There's a number of minor nits in a lot of the PHYs on the
PC Cards that use the Axis AX88190 or DLink DL10019 and DL10022 chips.
Forcing the autonegotiation doesn't seem to cause problems on the
cards that have sane PHYs, but makes several cards I have work without
further workarounds.

I'm not 100% sure that kicking the PHY and resetting them is the right
thing to do on the media change callback.  Other NICs seem to need
this and do similar things.
2009-04-02 16:58:45 +00:00
imp
92eaedec81 Add additional data on the MIIBUS WTF that I committed earlier. 2009-03-31 19:23:59 +00:00
imp
d11d06afca It turns out that the initialization is required since it sets up the
readout of the MAC address.
The 10ms delay was really needed.  Ooops.
2009-03-31 19:20:03 +00:00
imp
57b7d21e6f o Minor tweaks to the AX88x90 probe routine, mostly related to comments.
o Don't run through the register initialization in the read mac routine
  for the AX88x90.  It duplicates other stuff that we do.
o Eliminate the 10ms delay after we reset the AX88x90.  We already wait for
  the appropriate bits to indicate reset is done.
2009-03-31 18:25:09 +00:00
imp
9b2b26a623 Go back to filtering all PHY addresses above 16 since at least two
cards still have issues with them.  Maybe this is a silicon rev?  In
any case, doing the filtering only for the AX88790 for the moment.
2009-03-31 02:50:41 +00:00